← Cerebras 专题与八个进阶单元

CEREBRAS / LAB 03 OF 08

Host输入与布局:两次调用不能串结果

把输入移到host,明确传输元素数、符号可写性与每次调用的初始化。

本单元 4 小时。本公司八个单元共 32h,三家公司共额外 96h 核心实践;这笔时间在共同路线之外,未压入厂商入门的44h。

本页是实践讲义。打开、阅读或复制命令不代表完成。新单元的 SDK、simulator 与硬件命令均未在教材建设中执行;自己的结果应按实际后端保存。

先备与马上可用的例子

先完成:cerebras-02 →

直接打开机制图,边看边手推

PREDICT FIRST

具体问题与独立预期

输入与约定

同一A=[[1,2,3],[4,5,6]]。第一次x=[1,2,1],b=[0,0];第二次x=[0,1,0],b=[-1,1]。每次都计算新的y=Ax+b,不累积上次y。

先根据输入写下自己的结果与理由,再展开参考推演;随后运行或检查实现。

对照参考结果与原因

第一次[8,20],第二次[1,6],再次执行第一次仍[8,20]。行主序A payload=[1,2,3,4,5,6];A6项、x3项、b2项、y2项。

非对称输入和连续调用同时检测传输布局、输入覆盖与持久状态;全1输入容易掩盖转置错误。

机制怎样连接起来

公开Memcpy教程把A/x/b从PE初始化改为host传入,导出可写性也随之改变。本单元保留标量循环:每行设置临时sum=0,再赋值y[row]=sum+b[row],这样不会把上次输出当新输入。

memcpy_h2d的PE矩形和每PE元素数量描述搬运范围,不负责猜A是什么数学矩阵。先写一行一个元素的打包表:host下标→PE坐标→局部下标→数学A[row,col]。通过不对称数值检查顺序,而不是只看总和。

从编译元数据读M/N可以减少host与device重复写常量,但不能让不匹配的host数组自动变合法。在运行前验证长度、dtype、有限性;阻塞传输便于第一版保持源数组生命期,异步复用另需完成依赖。

CHOOSE ONE EXECUTION PATH

按手头环境推进

CPU 路径可以先完成。额外的 SDK 或设备验证要有自己的运行记录;本单元的四小时不同时要求完成四个分支。安装等待超过本页预算时,留下阻塞条件,继续可做的数学、代码与协议工作。

CPU · 现有机器 · 本单元尚未验收

条件:现有macOS或Linux与C++20编译器;不需要加速卡、VM或SDK。

本分支做什么:验证三次GEMV输出、短输入拒绝和故意保留旧b的失败。

保存什么证据:保存本人源码、输入、实际输出、退出码与修复记录;仅标CPU逻辑验证,不称官方simulator。

教材初始执行状态:not-executed。这不是对你个人学习进度的判断。

SDK · 编译与环境 · 本单元尚未验收

条件:已获官方SDK访问并具备匹配版本环境;Linux使用官方Apptainer/SingularityCE等前置,Apple Silicon按第01单元核对并自行准备Lima路径。没有环境时仍可先完成CPU分支。

本分支做什么:编译支持host输入的参数化源码,检查本次out.json而非旧目录。

保存什么证据:保存实际build_id、编译命令、退出码、产物元数据与源码摘要;只编译不能标运行成功。

教材初始执行状态:not-executed。这不是对你个人学习进度的判断。

官方 simulator · 本单元尚未验收

条件:已经可用的对应官方fabric simulator和同版编译产物;standalone/legacy路径与appliance路径按官方入口区分。

本分支做什么:同一runner里跑三次,分别保存输入、输出与检查;无需性能计时。

保存什么证据:实际host检查、输入、日志、完成状态与版本分开留在自己的记录;这里没有运行结果。

教材初始执行状态:not-executed。这不是对你个人学习进度的判断。

真实设备 · 本单元尚未验收

条件:用户已经有权使用的Cerebras系统及其管理员支持的版本/运行模式;本课程不要求花钱、租机器或提交集群作业。

本分支做什么:若之后有硬件,按其模式重跑相同输入,不把simulator过程的时间当硬件速度。

保存什么证据:设备正确性与性能分别记录;simulator耗时不作为硬件时间,硬件未执行保持未通过。

教材初始执行状态:not-executed。这不是对你个人学习进度的判断。

READ → BUILD → BREAK → EXPLAIN

四小时,留下一个完整产出

可拆成多个时段。每次停下时保存代码、输入、实际结果和下一步,不用重新读整篇。没有通过当前检查时继续修正,不靠翻页推进。

1. 手推两组输出和字节角色 · 30 分钟

  1. 算出每行乘加项,再标出A/x/b谁写谁读。
  2. 明确此处的MEMCPY_32BIT是传输数据类型选择,与数学shape不是同一字段。

这一段的产出:两次调用的oracle表

2. 建立host传输合同 · 55 分钟

  1. 根据公开Memcpy/Parameters修改本人源码:输入导出允许host写,去掉PE内覆盖输入的初始化。
  2. host先检查payload长度,再按单PEROI传6/3/2项;M/N已参数化才使用--params,并从本次out.json读取。

这一段的产出:传输/形状对照表

3. 运行连续输入 · 85 分钟

  1. 先在CPU版本连续执行第一次、第二次、第一次三次,逐项比较。
  2. 已有SDK/simulator时对同一次load/run生命周期依次H2D→launch→D2H,确保第二次重新写x/b;不只重启三次掩盖状态问题。没有环境则用CPUhost状态模型检查完整链。

这一段的产出:三次独立结果记录

4. 故意制造一处不一致 · 40 分钟

  1. 在CPU副本只更新x却保留旧b,确认第二次错成[2,5];修复后恢复[1,6]。
  2. 另将x缩为2项,要求host在提交前拒绝,而不是等待设备越界。

这一段的产出:缺输入更新/短payload拒绝

5. 口述生命周期 · 30 分钟

  1. 解释一次传输完成前为什么不能重用host源数组。
  2. 记录实际运行版本,未使用SDK保持未执行。

这一段的产出:90秒输入到回读说明

EXPLICIT ENVIRONMENT / EXPLICIT STATUS

命令与可保存的起点

以下代码按各自环境使用,运行前完成对应步骤并核对版本。编译失败后停止,不运行目录中的旧二进制;每次采集日志使用新的运行目录。设备程序仅运行在你已有且可使用的环境中。

1. 已在layout/PE声明M、N参数后编译

环境:SDK · 编译与环境 · 状态:not-executed。核对官方 API / 工具说明 ↗

bash · 按说明保存到自己的练习目录
cslc layout.csl --arch=wse2 --fabric-dims=8,3 --fabric-offsets=4,1 --params=M:2,N:3 --memcpy --channels=1 -o out-c03
2. 本人run.py已实现三次调用检查,且simulator可用

环境:官方 simulator · 状态:not-executed。核对官方 API / 工具说明 ↗

bash · 按说明保存到自己的练习目录
cs_python run.py --name out-c03

一个必须能解释的错误

错误情境:新x已传入,却漏传新b,或者PE初始化把host数据覆盖。

为什么会错:回读可能仍是形状正确的数组,却属于另一份输入合同。

怎样修复:对每个输入标明最后写入点;第二组非零b与选择中间列的x能抓住这种错误。

EVIDENCE BEFORE ADVANCING

验收与面试追问

  • 三次结果分别8/20、1/6、8/20;不是复用上次结果。
  • host提交前拒绝短数组与非有限输入。
  • A打包顺序、每PE长度和编译参数有共同记录。

最后留下这几项

输入和预期、自己的源码或明确标为推演的状态表、实际命令/输出/退出码、一个失败与修复、后端与版本、尚未执行的部分。运行已有教学例子与独立完成修改分别记录。

1. 为什么不用全1输入测试所有布局?

对照中文要点与英文回答

对称数据会让若干错位看起来相同;选择中间列的x与非零b可以隔离输入位置。

Asymmetric inputs expose packing mistakes that all-ones data may hide.

2. 第二次输出错成[2,5]说明什么?

对照中文要点与英文回答

它恰好是A乘第二个x但没有新b,先核对b传输和PE是否覆盖,不先怀疑浮点误差。

That result matches the new matrix-vector product without the new bias, so I check the bias update first.

3. 从out.json读shape还要检查输入长度吗?

对照中文要点与英文回答

要,元数据告诉需要什么,不能证明实际传入数组已经符合。

Compile metadata defines the expected shape; the host must still validate the supplied buffers.

这些是依照本单元机制设计的追问,不是公司真题。个人验收仍依据实际代码、测试、测量与口述。

资料与版本核验

  • 3. Memcpy ↗

    Writable symbols; host-to-device copies

    核验日期:2026-09-05。官方公开文档于2026-09-05核验;安装页所列下载包为SDK 2.10.0-{build_id}。这不是本机安装事实。执行时记录实际tarball/build_id、目标WSE架构和对应文档版本。

  • 4. Parameters ↗

    Compile-time parameters and reading out.json

    核验日期:2026-09-05。官方公开文档于2026-09-05核验;安装页所列下载包为SDK 2.10.0-{build_id}。这不是本机安装事实。执行时记录实际tarball/build_id、目标WSE架构和对应文档版本。

  • SdkRuntime API Reference ↗

    Memcpy argument order, ROI, element count and blocking

    核验日期:2026-09-05。官方公开文档于2026-09-05核验;安装页所列下载包为SDK 2.10.0-{build_id}。这不是本机安装事实。执行时记录实际tarball/build_id、目标WSE架构和对应文档版本。

正文、问题和实践设计依据公开资料独立撰写。官方页面的示例输出是资料中的结果,不是本机运行证据。latest 链接可能变化,请在自己的复现说明中保留实际版本。