CEREBRAS / LAB 02 OF 08
单PE闭环:导出符号、启动与回读
写清layout、PE代码和Python host的责任,以一个小GEMV连通整个生命周期。
本单元 4 小时。本公司八个单元共 32h,三家公司共额外 96h 核心实践;这笔时间在共同路线之外,未压入厂商入门的44h。
本页是实践讲义。打开、阅读或复制命令不代表完成。新单元的 SDK、simulator 与硬件命令均未在教材建设中执行;自己的结果应按实际后端保存。
先备与马上可用的例子
先完成:cerebras-01 →
- 42-a · 拒绝错误生命周期顺序:先看输入和实际源码,再开始自己的修改;教学实现与自己的产出分别记录。
- 42-b · 导出名称合同:先看输入和实际源码,再开始自己的修改;教学实现与自己的产出分别记录。
直接打开机制图,边看边手推
- 36 · 可改条件的机制图 → Tensor shape、stride 与 GEMM 分块;图解不执行厂商 SDK。
- 45 · 逐步状态与文字图解 → WSE 与 PE:把数据放在拥有它的计算节点旁边;图解不执行厂商 SDK。
- 46 · 逐步状态与文字图解 → CSL 与 host:装载、启动、回读是一份共同合同;图解不执行厂商 SDK。
- 48 · 逐步状态与文字图解 → 功能模型、simulator 与硬件:分别证明什么;图解不执行厂商 SDK。
PREDICT FIRST
具体问题与独立预期
输入与约定
沿用A=[[1,2,3],[4,5,6]],x=[1,2,1],b=[0,0];单PE,M=2,N=3。先在PE初始化固定输入,host只调用init_and_compute并读取2项y。
先根据输入写下自己的结果与理由,再展开参考推演;随后运行或检查实现。
对照参考结果与原因
y=[8,20];host请求不存在的符号应被识别为名称合同错误,不伪造零结果。CPU生命周期模型应拒绝尚未运行就回读。
一次闭环需要源码、编译产物、符号名、RPC完成与回读长度共同一致;只写数学函数还不是完整CSL程序。
机制怎样连接起来
本单元先使用标量循环,避免同时引入DSD。CSL的var/const、fn、[N]f32与@开头内建先按Basic Syntax阅读;layout用于编译时放置PE程序,PE文件负责局部数组与函数。
layout侧用@export_name声明host可见名称与可写性;PE侧用@export_symbol连接实际对象/函数。两端还需要匹配memcpy参数。host用SdkRuntime.get_id取得y符号,load/run后launch,回读完成再验证并stop。名称和类型是合同,单看某个字符串存在不够。
本例同步host调用按公开standalone教程操作;使用memcpy基础设施的可调用函数需要在工作完成后恢复命令流。后面引入异步fabric操作时,恢复时机必须移到完成任务,不能照搬函数尾部。没有SDK时写状态机并检测非法顺序,与42-a对照,但它仍是CPU模型。
CHOOSE ONE EXECUTION PATH
按手头环境推进
CPU 路径可以先完成。额外的 SDK 或设备验证要有自己的运行记录;本单元的四小时不同时要求完成四个分支。安装等待超过本页预算时,留下阻塞条件,继续可做的数学、代码与协议工作。
CPU · 现有机器 · 本单元尚未验收
条件:现有macOS或Linux与C++20编译器;不需要加速卡、VM或SDK。
本分支做什么:实现符号表及生命周期状态机,合法路径得到[8,20]并拒绝early read和错误名。
保存什么证据:保存本人源码、输入、实际输出、退出码与修复记录;仅标CPU逻辑验证,不称官方simulator。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
SDK · 编译与环境 · 本单元尚未验收
条件:已获官方SDK访问并具备匹配版本环境;Linux使用官方Apptainer/SingularityCE等前置,Apple Silicon按第01单元核对并自行准备Lima路径。没有环境时仍可先完成CPU分支。
本分支做什么:编译本人完整单PE源码并保存架构、输出目录及错误。
保存什么证据:保存实际build_id、编译命令、退出码、产物元数据与源码摘要;只编译不能标运行成功。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
官方 simulator · 本单元尚未验收
条件:已经可用的对应官方fabric simulator和同版编译产物;standalone/legacy路径与appliance路径按官方入口区分。
本分支做什么:用同版host回读两项,与独立oracle对照;未具备环境不填成功。
保存什么证据:实际host检查、输入、日志、完成状态与版本分开留在自己的记录;这里没有运行结果。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
真实设备 · 本单元尚未验收
条件:用户已经有权使用的Cerebras系统及其管理员支持的版本/运行模式;本课程不要求花钱、租机器或提交集群作业。
本分支做什么:运行模式可能为appliance;先读对应官方入口,不把standalone命令直接投到集群。
保存什么证据:设备正确性与性能分别记录;simulator耗时不作为硬件时间,硬件未执行保持未通过。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
READ → BUILD → BREAK → EXPLAIN
四小时,留下一个完整产出
可拆成多个时段。每次停下时保存代码、输入、实际结果和下一步,不用重新读整篇。没有通过当前检查时继续修正,不靠翻页推进。
1. 拆分三份程序 · 35 分钟
- 读公开complete tutorial的layout/PE/host小节,给每一份文件写两条责任。
- 把M=2,N=3和本题数值代入标量循环;不要保留官方示例4×6输入后期待本题结果。
这一段的产出:三文件责任和数据图
2. 搭建导出合同 · 55 分钟
- 在自己的练习目录写layout.csl、pe_program.csl、run.py;依据公开教程连上memcpy参数与两个导出端。
- host固定回读2个f32,先在CPU写同名符号注册表检测y与错误名称。SDK未具备时完成源码草稿和合同表。
这一段的产出:符号/类型/长度对照表
3. 按环境执行闭环 · 80 分钟
- 已有SDK才按本页cslc命令编译;若常量写在源码中,不额外传没有声明的参数。
- standalone simulator可用才运行cs_python;保存实际输出与退出码。无SDK则运行CPU状态机,合法load→run→launch→read→stop成功,early read被拒绝。
这一段的产出:实际后端的生命周期记录
4. 让导出错误可定位 · 40 分钟
- 先在CPU注册表请求错误名reslut并确认拒绝;SDK可用时只在副本host改同一名称,保存真实异常。
- 还原名称,复跑正常结果;避免把缺失名称转换成0继续计算。
这一段的产出:错误名失败与修复
5. 闭卷复述host流程 · 30 分钟
- 不看源码画get_id、load、run、launch、回读、stop之间的条件。
- 解释只有前两个y值可能正确但回读长度错误为什么仍然不合格。
这一段的产出:90秒英文流程说明
EXPLICIT ENVIRONMENT / EXPLICIT STATUS
命令与可保存的起点
以下代码按各自环境使用,运行前完成对应步骤并核对版本。编译失败后停止,不运行目录中的旧二进制;每次采集日志使用新的运行目录。设备程序仅运行在你已有且可使用的环境中。
1. 自己的单PE源码齐备后;standalone simulator编译路径
环境:SDK · 编译与环境 · 状态:not-executed。核对官方 API / 工具说明 ↗
cslc layout.csl --arch=wse2 --fabric-dims=8,3 --fabric-offsets=4,1 --memcpy --channels=1 -o out-c022. 仅已有对应官方simulator;本次CSL产物已编译、run.py已准备
环境:官方 simulator · 状态:not-executed。核对官方 API / 工具说明 ↗
cs_python run.py --name out-c02一个必须能解释的错误
错误情境:只导出layout里的名称,没有把PE里的实际数组/函数接起来。
为什么会错:host需要可见名称与真实对象之间的匹配,数学代码正确不能替代跨层绑定。
怎样修复:逐行核对名称、类型、可写性、PE导出和get_id,使用受控错误名称验证失败路径。
EVIDENCE BEFORE ADVANCING
验收与面试追问
- 三文件中M/N、符号名和长度一致;回读[8,20]来自实际执行后端。
- 编译成功与运行成功分栏;CPU状态机不写成SDK执行。
- 错误名称和早读至少在CPU合同中被拒绝,不吞掉错误。
最后留下这几项
输入和预期、自己的源码或明确标为推演的状态表、实际命令/输出/退出码、一个失败与修复、后端与版本、尚未执行的部分。运行已有教学例子与独立完成修改分别记录。
1. layout与PE分别做什么?
对照中文要点与英文回答
layout在编译阶段分配程序矩形、tile代码与导出名;PE代码计算局部数据并提供对应符号。
The layout assigns code and exported names at compile time. The PE program owns the local computation and symbols.
2. 为什么launch完成以后还要回读检查?
对照中文要点与英文回答
完成只说明调用控制流结束,host还需按正确ROI、长度和类型取回数据并比较结果。
Completion is not a correctness check. I still copy the expected region and compare every result.
3. 什么时候恢复命令流?
对照中文要点与英文回答
标量同步计算结束后恢复;异步通信时要等完成任务,不能在提交后立刻恢复。
I unblock the command stream after the required work completes, not merely after asynchronous work is submitted.
这些是依照本单元机制设计的追问,不是公司真题。个人验收仍依据实际代码、测试、测量与口述。
资料与版本核验
- 0. Basic CSL Syntax ↗
Basic CSL types and scalar loops
核验日期:2026-09-05。官方公开文档于2026-09-05核验;安装页所列下载包为SDK 2.10.0-{build_id}。这不是本机安装事实。执行时记录实际tarball/build_id、目标WSE架构和对应文档版本。
- 1. A Complete Program ↗
Define Layout; Export Symbols; Write Host Code; compile flags
核验日期:2026-09-05。官方公开文档于2026-09-05核验;安装页所列下载包为SDK 2.10.0-{build_id}。这不是本机安装事实。执行时记录实际tarball/build_id、目标WSE架构和对应文档版本。
- SdkRuntime API Reference ↗
get_id, load, run, launch, memcpy_d2h, stop
核验日期:2026-09-05。官方公开文档于2026-09-05核验;安装页所列下载包为SDK 2.10.0-{build_id}。这不是本机安装事实。执行时记录实际tarball/build_id、目标WSE架构和对应文档版本。
- Compiling and Running Examples ↗
Standalone compilation and host execution
核验日期:2026-09-05。官方公开文档于2026-09-05核验;安装页所列下载包为SDK 2.10.0-{build_id}。这不是本机安装事实。执行时记录实际tarball/build_id、目标WSE架构和对应文档版本。
正文、问题和实践设计依据公开资料独立撰写。官方页面的示例输出是资料中的结果,不是本机运行证据。latest 链接可能变化,请在自己的复现说明中保留实际版本。