张量
这一部分走一遍张量主线:创建张量、算、读回主机。PyTorch 的 torch.Tensor 把形状、dtype、设备全放在运行期;burn 的 Tensor<D, K> 把秩 D 和种类 K(Float / Int / Bool)放在类型上,dtype 和设备留在运行期。于是有一类错误从运行期挪到了编译期(秩写错),另一类行为换了默认值(dtype 跟设备、归约保留维度),还有几处要自己多写一步(广播前补维、跨 dtype 运算前 cast)。
每页都是同一个任务的两份程序,数字从实测输出里贴。burn 内部怎么实现张量,见 burn 卷的张量。
- 创建与形状:
torch.tensor看值定 dtype,burn 看类型定种类;秩写错是编译错误,数据形状和秩对不上、0 维张量是运行期 panic;reshape的-1两边一样,0不一样;try_to_vec不做 dtype 转换。 - dtype 与设备:默认 dtype 属于设备(Flex 上
Int是I32),configure只能一次;没有类型提升,F32 + F64在后端 panic,Int + 0.5静默截断;设备两边都是运行期的值,to_device不改 dtype。 - 归约与广播:
sum_dim/mean_dim/argmax永远保留维度,全局sum/mean返回[1];广播规则相同,但秩要先用unsqueeze对齐;64×1000 的 f32 归约两边差 8.58e-6。 - 整数运算:整数除法和取余的取整方向和 PyTorch 的
//、%对不对得上;I32 求和溢出。 - 切片与索引:
a[:, 1:3]对slice和s!;越界、负下标、布尔掩码两边各怎么处理。
flowchart TB data["主机数据"] -->|"from_data"| t["Tensor D K"] dev["Device 设置"] -.->|"默认 dtype"| t t -->|"运算 归约 广播"| t2["结果 Tensor"] t2 -->|"into_data"| host["主机 Vec"] rank["秩写错"] -.->|编译期| ce["编译错误"] shape["形状 dtype 不符"] -.->|运行期| pn["panic"]
💬 关联讨论
发起讨论加载中...