已开启
[Feature]: hyper-parallel PyTorch 侧接入 MC2 融合张量并行 Linear Style #318
changzherui创建于  8月6日
changzherui
changzherui成员
8月6日 创建

🚀 功能描述

0. 基本信息

项目 内容
特性名称 HyperParallel PyTorch/Ascend MC2 融合张量并行 Linear Style
开发分支 feat/tp-mc2-fused-parallel
适用后端 PyTorch + Ascend(torch_npu MC2 kernel)
已验证设备 Ascend NPU(本地 UT + 2 卡 MC2 ST)
对应实现 hyper-parallel!1096(已合入 master)
对齐上游 mindformers!8397
当前阶段 Phase 1:TP + Sequence Parallel 下 Column/Row Linear 的 MC2 融合;默认关闭

1. 需求背景

HyperParallel 在 PyTorch / Ascend 张量并行路径上,Column / Row Parallel Linear 的集合通信与 nn.Linear 矩阵乘仍是分离调度(DTensor redistribute / Partial→AllReduce-RS)。MindFormers PyNative 侧已具备 MC2(MatMul + Communication)融合能力,但 HyperParallel Torch 侧缺少对齐实现:

能力 MindFormers PyNative HyperParallel Torch(合入前) 用户影响
Column SP:AllGather + MatMul 融合 MC2ColwiseParallel + all_gather_matmul 通信与 nn.Linear 分离 TP+SP MLP 前向无法吃到 Ascend MC2 通算流水
Row SP:MatMul + ReduceScatter 融合 MC2RowwiseParallel + matmul_reduce_scatter Partial→AllReduce/RS 分离路径 同上
可训练自定义反向 无法在训练图中直接调用 torch_npu MC2 前向核

TP + Sequence Parallel 场景下无法吃到 Ascend MC2 通算流水,独立通信算子调度开销偏高。


2. 本期目标与非目标

2.1 本期目标

  1. 新增可训练 MC2Linear:前向 AG+MM / MM+RS;Column 反向默认融合 MRS(满足 n_local≥256)。
  2. 新增 MC2ColwiseParallel / MC2RowwiseParallel:要求序列维切分 I/O,apply 时替换为 MC2Linear
  3. 公开导出上述 API;examples/torch/llama3/parallelize.py 增加 enable_mc2(默认 False,且需 SP)。
  4. 补齐 UT + Ascend ST,覆盖 Colwise/Rowwise 前向+反向精度、MLP 链、fp16、Shard(1)
  5. 优化 tensor_parallel ST 调度与分布式 launcher:父进程不提前加载 torch/mindspore,缩短墙钟。

2.2 本期非目标

  • MindSpore 后端同款 MC2 Style。
  • MoE / Attention 路径的 MC2 融合。
  • 正式 E2E 吞吐/加速比报告与默认开启 MC2。
  • 放开 Ascend MC2 kernel 之外的 dtype / world_size / 收缩维约束。
  • 无 Sequence Parallel 场景下的 MC2 启用。

3. 改动范围

3.1 MC2 产品能力

  • MC2Linear + 融合 autograd(mc2.py
  • MC2ColwiseParallel / MC2RowwiseParallelmc2_style.py
  • 公开导出;示例 enable_mc2 开关

3.2 测试与基础设施

  • tensor_parallel ST:前向+反向合并同一次 torchrun;去重 4 卡 Linear launcher;端口错开;MC2 ST shape 保证 n_local≥256
  • 新增 tests/common/distributed_launcher.py
  • 新增 UT:tests/ut/core/tensor_parallel/test_mc2_style.py
  • 新增 ST:tests/torch/tensor_parallel/test_mc2_distributed.py

4. 对外接口

# 融合 Linear(可训练)
from hyper_parallel.core.tensor_parallel.mc2 import MC2Linear

# Parallel Style(apply 时替换为 MC2Linear)
from hyper_parallel.core.tensor_parallel import (
    MC2ColwiseParallel,
    MC2RowwiseParallel,
)

# 示例开关(需 Sequence Parallel)
# examples/torch/llama3/parallelize.py: enable_mc2=True

是否影响现有 API

  • 默认行为不变:现有 ColwiseParallel / RowwiseParallel 保持;MC2 为新增 Style,需显式选用或打开 enable_mc2
  • 新增公开导出MC2LinearMC2ColwiseParallelMC2RowwiseParallel
  • 测试基础设施distributed_launcher 与 ST 调度调整不影响产品 API

5. 当前支持矩阵 / 关键约束

能力 状态 限制
PyTorch + Ascend MC2 Column/Row Linear 支持 需 Sequence Parallel;enable_mc2 默认关
dtype 支持 float16 / bfloat16
收缩维 k 支持 k ∈ [256, 65535);Column 反向时为 n_local
world_size 支持 {2, 4, 8}
Column 反向融合 MRS 支持 n_local≥256,否则不可走融合反向
MindSpore 后端 MC2 Style 不支持 本期非目标
MoE / Attention MC2 不支持 本期非目标
无 SP 的 MC2 不支持 Style 要求序列维切分 I/O
正式 E2E 吞吐报告 未覆盖 留后续

6. 风险与限制

6.1 Ascend MC2 kernel 硬约束

MC2 路径直接依赖 CANN / torch_npu 融合核。dtype、收缩维、world_size、Column 反向 n_local≥256 任一不满足时,不能静默回退到“看起来能跑但未融合”的路径,必须在 Style/Linear 入口明确失败或保持默认关闭,避免用户误以为已获得 MC2 收益。

6.2 仅覆盖 Linear + SP,能力面偏窄

本期只覆盖 TP+SP 下的 Column/Row Linear。Attention、MoE、无 SP 拓扑仍走原分离通信路径。若示例或文档表述成“全模型 MC2”,会造成预期偏差;enable_mc2 必须继续默认关闭,并由调用方显式打开。

6.3 数值与调度差异

融合核与“通信 + nn.Linear”分离路径在内核实现、rounding、流水排布上可能存在可接受范围内的数值差。验收应以与参考路径的精度阈值/相对误差为准,而不是 bit-wise 一致。ST 需覆盖前向+反向,避免只验前向。

6.4 测试基础设施变更的连带风险

父进程 launcher 轻量化、ST 合并 torchrun、端口错开等改动会影响 tensor_parallel 相关用例调度。风险是“MC2 本身正确,但并行起测/导入路径回归”。验收需同时覆盖:

  • MC2 功能 ST;
  • 导入 parallel_case / distributed_launcher / shard-ops suite 时父进程不加载 torch/mindspore

6.5 与 MindFormers 对齐漂移

HyperParallel 侧实现需持续对齐 mindformers PyNative MC2 语义。上游 kernel ABI、反向融合条件或 Style 约束若变更,本仓库可能出现行为分叉;后续变更应同步对照 mindformers!8397 及后续修复。


7. 验证设计与当前结果

7.1 UT 覆盖

tests/ut/core/tensor_parallel/test_mc2_style.py

  • 参数保留与 mode 配置;
  • 序列维布局约束(非法布局 fail-closed);
  • apply 后模块替换为 MC2Linear
  • Column 反向走融合 MRS 等路径选择。

7.2 ST 覆盖(Ascend)

tests/torch/tensor_parallel/test_mc2_distributed.py

Level 内容
level0 Colwise / Rowwise 前向+反向精度(各 2 卡,同一波)
level1 MLP 链前向+反向;fp16 Colwise;Shard(1) Colwise

补充约束:MC2 ST 默认 shape 保证 n_local≥256,满足融合反向条件。

7.3 基础设施验证

  • 导入 parallel_case / distributed_launcher / shard-ops suite 时,父进程不加载 torch / mindspore
  • tensor_parallel ST 调度调整后,相关用例可稳定并行启动(端口错开,减少冲突重试)。

7.4 本地复现

export HYPER_PARALLEL_PLATFORM=torch
pytest tests/ut/core/tensor_parallel/test_mc2_style.py -q

# ST(示例 2 卡)
export ASCEND_RT_VISIBLE_DEVICES=4,5
pytest tests/torch/tensor_parallel/test_mc2_distributed.py -v

7.5 当前结果

  • 本地 UT / 2 卡 MC2 ST 通过;
  • launcher 轻量化抽检通过;
  • 正式多机 E2E 吞吐对比报告未覆盖(见非目标)。

8. 验收标准

8.1 功能验收

  • MC2LinearMC2ColwiseParallelMC2RowwiseParallel 可从公开路径导入。
  • 在 TP+SP 合法配置下,Column/Row Style apply 后实际替换为 MC2Linear
  • Colwise / Rowwise 前向+反向与参考路径精度达标(按 ST 阈值)。
  • MLP 链、fp16 Colwise、Shard(1) Colwise ST 通过。
  • enable_mc2=False(默认)时,现有非 MC2 TP 行为不变。

8.2 兼容性验收

  • 未启用 MC2 时,ColwiseParallel / RowwiseParallel 路径行为不变。
  • 新增 API 为增量导出,不破坏既有 Parallel Style 名称与默认并行策略。
  • 测试 launcher 变更不导致非 MC2 tensor_parallel / shard-ops 用例大面积不可启动。

8.3 明确报错 / fail-closed

以下场景必须明确失败或拒绝启用,而不是静默退回“未融合但宣称 MC2”:

  • 无 Sequence Parallel 却启用 MC2 Style;
  • dtype 非 float16/bfloat16
  • 收缩维 / n_local 不满足 MC2 kernel 或融合反向约束;
  • world_size 不在 {2, 4, 8}

8.4 验收方法

  • 参考示例中 enable_mc2 的使用方式,自己构建一个MC2的TP切分方式
  • 能力边界(仅 Linear、不含 MoE/Attention/MindSpore)在 issue/PR 描述中可见。

9. 现有替代方案

继续使用现有 ColwiseParallel / RowwiseParallel:通信与 MatMul 分离调度,功能可用,但在 Ascend TP+SP 下无法走 MC2 融合核,通信调度开销更高。MindFormers PyNative 侧已有同类能力,本需求为 HyperParallel Torch 路径对齐补齐。

与 DFX 相关性

  • 可观测性:无新增强制日志;示例通过 enable_mc2 可选启用
  • 可靠性:UT + Ascend ST(前向+反向)
  • 性能:降低独立通信算子调度开销;正式吞吐报告留后续
  • 兼容性:默认关闭,不改变现有 TP 默认行为

补充信息

likedislike
changzheruichangzherui成员
8月6日 添加了label:feature
changzheruichangzherui成员
8月6日 修改了issue 的描述
nihui11
8月11日 评论:
  1. 文档与开关验收 这里的文档是指什么?在哪看?
  2. enable_mc2开关需要怎么配置,只在examples/torch/llama3/parallelize.py示例脚本里找到这个开关,如果不跑示例,是否需要配置enable_mc2?
likedislike
chopin_syp
8月11日 评论:

缺少接口参数说明和约束
缺少了竞品分析
缺少必要的样例说明

likedislike
changzheruichangzherui成员
8月13日 将 changzherui1 设为负责人
changzherui
changzherui成员
8月13日 评论:
  1. 文档与开关验收 这里的文档是指什么?在哪看?
  2. enable_mc2开关需要怎么配置,只在examples/torch/llama3/parallelize.py示例脚本里找到这个开关,如果不跑示例,是否需要配置enable_mc2?

@nihui11

  1. 没有文档,复制的模板标题,已修改。
  2. 当前这个PR,提供的是MC2的能力,用户可以选择使用或者不使用。使用的话可以在构建网络切分时,自己调用相关的style方法。enable_mc2 只是举了一个demo,表示用户可以在端到端场景自己控制是否使用。(后续可以考虑在trainer相关能力完备后,在yaml侧暴露一个开关,当前不涉及)
likedislike
changzheruichangzherui成员
8月13日 修改了issue 的描述
changzherui
changzherui成员
8月13日 评论:

1. 「文档与开关验收」里的「文档」指什么?在哪看?

这里的「文档」不是指某个已存在的独立文档页,而是指本特性对外可读的说明载体,验收范围包括:

载体 当前状态 内容
本 Issue / 合入 PR(!1096)描述 ✅ 已有 能力边界、约束矩阵、验收标准
示例脚本注释与 docstring ✅ 已有 examples/torch/llama3/parallelize.pybench_mc2_vs_tp.py
源码模块/类 docstring ✅ 部分 mc2.pymc2_style.py
docs/api/api_reference.md ❌ 尚未补齐 MC2 三个 API 条目缺失
独立用户指南 ❌ 尚未补齐 后续单独补文档 PR

结论:Issue 8.4 的「文档验收」目前主要靠 Issue/PR + 代码内注释满足;正式 API 文档尚未落地,这是已知 gap,会在后续文档 PR 中补齐。


2. enable_mc2 怎么配?不跑示例要不要配?

enable_mc2 不是框架级全局开关或环境变量,而是 Llama3 示例封装层 的参数:

parallelize_llama3(model, tp_mesh, enable_mc2=True)  # 默认 False

内部逻辑:仅在 enable_sequence_parallel=True 时生效,将 MLP 的 ColwiseParallel/RowwiseParallel 替换为 MC2ColwiseParallel/MC2RowwiseParallel;Attention 投影仍走非 MC2 路径。

不跑 Llama3 示例时,不需要也不存在 enable_mc2 这个参数。正确用法是在自定义 parallelize_module plan 中 直接选用 MC2 Style

from hyper_parallel import MC2ColwiseParallel, MC2RowwiseParallel, parallelize_module
from hyper_parallel.core.dtensor.placement_types import Shard

plan = {
    "fc1": MC2ColwiseParallel(input_layouts=Shard(1), use_local_output=False),
    "fc2": MC2RowwiseParallel(
        input_layouts=Shard(-1),
        output_layouts=Shard(1),
        use_local_output=False,
    ),
}
parallelize_module(model, tp_mesh, plan)

参考样例:

  • examples/torch/bench_mc2_vs_tp.py — MC2 vs 非 MC2 性能对比
  • tests/torch/tensor_parallel/test_mc2_distributed.py — 分布式精度 ST

默认行为不变:不选用 MC2 Style 时,仍走原有 ColwiseParallel/RowwiseParallel


3. 接口参数说明与约束(补充完整版)

承认 Issue 正文对接口参数的说明不够系统,以下为补充。正式版将写入 docs/api/api_reference.md

3.1 公开 API

from hyper_parallel import MC2ColwiseParallel, MC2RowwiseParallel
from hyper_parallel.core.tensor_parallel.mc2 import MC2Linear

3.2 MC2ColwiseParallel

Column 并行 + 融合 AllGather+MatMul。继承 ColwiseParallel

参数 类型 默认 说明
input_layouts Placement Replicate() 必须设为 Shard(...)(序列维切分);默认 Replicate() 会在构造时 ValueError
output_layouts Placement Shard(-1) 输出 layout;Column 输出按 last-dim shard
use_local_output bool True False 时保持 DTensor 链路(MLP 链推荐)

行为要点

  • 不做 input AG redistribute,desired_input_layouts = input_layouts(保持序列 sharding,融合核内部 AG)
  • apply() 时将 nn.Linear 原地替换为 MC2Linear(mode=all_gather
  • 仅支持 nn.Linear(Embedding 等会 NotImplementedError

3.3 MC2RowwiseParallel

Row 并行 + 融合 MatMul+ReduceScatter。继承 RowwiseParallel

参数 类型 默认 说明
input_layouts Placement Replicate() 实际 desired 为 Shard(-1)(Partial 输入,由 base Rowwise 处理)
output_layouts Placement Replicate() 必须设为 Shard(...)(序列维切分);默认 Replicate()ValueError
reduce_dtype dtype None 继承自 Rowwise;MC2 前向走融合 RS,此参数影响非 MC2 输出路径
use_local_output bool True 是否 to_local()

行为要点

  • apply() 时替换为 MC2Linear(mode=reduce_scatter
  • Row 路径要求 序列维长度能被 world_size 整除,否则 RuntimeError

3.4 MC2Linear.configure_mc2

通常由 Style apply() 自动调用,高级用户可直接配置:

参数 说明
mode "all_gather"(Column)或 "reduce_scatter"(Row)
group TP ProcessGroup
world_size group 大小
sequence_dim SP 序列轴维度索引(支持负索引)

前置条件:须先 MC2Linear.from_linear(nn.Linear) + Style apply();未配置就 forward 会 RuntimeError;weight 须为 DTensor。

3.5 Kernel / 运行时约束

约束 说明 入口校验
后端 PyTorch + Ascend NPU + torch_npu import 时 RuntimeError
Sequence Parallel Style 要求序列维 Shard layout Style 构造时 ValueError
dtype float16 / bfloat16 kernel 运行时(入口未校验,后续可补)
收缩维 k k ∈ [256, 65535) kernel 运行时
world_size {2, 4, 8} kernel 运行时
Column 反向融合 MRS 收缩维 = out_features / tp(即 n_local),需 ≥ 256 kernel 运行时
Row RS 序列维 size % world_size == 0 MC2Linear forward RuntimeError
batch-first [B, S, H] + Shard(1) 时内部 permute 到 seq-first 自动处理
模块类型 nn.Linear Style apply NotImplementedError

Shape 选型公式(MLP 链设计时参考,ST 注释):

  • Column 前向收缩维 = in_features
  • Row 前向收缩维 = in_features / tp
  • Column 反向(融合 MRS)收缩维 = out_features / tp
  • 实践中:in_features ≥ 256 × world_size,Column 层的 out_features / tp ≥ 256

fail-closed 说明:Issue 8.3 要求 dtype/k/world_size 不满足时在入口明确失败;当前 layout 约束已在 Style 入口校验,dtype/k/world_size 暂依赖 kernel 运行时失败。后续会在 Style/Linear 入口补前置校验,与 8.3 对齐。


4. 竞品 / 替代方案分析(补充)

方案 通信+MatMul 可训练反向 TP+SP MLP 备注
HyperParallel 默认 ColwiseParallel/RowwiseParallel 分离调度 功能完整,Ascend 上无法走 MC2 融合流水
HyperParallel MC2 Style(本期) AG+MM / MM+RS 融合 ✅ 自定义 autograd ✅ 仅 Linear+SP 默认关闭,需显式选用
MindFormers PyNative MC2 融合 对齐上游 mindformers!8397
PyTorch DTensor 原生 TP 分离 无 Ascend MC2 融合核

本期定位为 HyperParallel Torch 路径对齐 MindFormers MC2 能力补齐,非全框架替代。


5. 样例说明(补充)

样例 路径 用途
Llama3 TP + 可选 MC2 examples/torch/llama3/parallelize.py 端到端模型,enable_mc2=True 仅作用于 MLP
MC2 vs TP 性能对比 examples/torch/bench_mc2_vs_tp.py 独立 MLP stack,直接选用 MC2 Style
分布式精度 ST tests/torch/tensor_parallel/test_mc2_distributed.py Col/Row 前向+反向、MLP 链、fp16、Shard(1)
UT tests/ut/core/tensor_parallel/test_mc2_style.py layout 校验、模块替换、反向路径

本地复现

export HYPER_PARALLEL_PLATFORM=torch
pytest tests/ut/core/tensor_parallel/test_mc2_style.py -q

export ASCEND_RT_VISIBLE_DEVICES=4,5
pytest tests/torch/tensor_parallel/test_mc2_distributed.py -v

likedislike
nihui11
8月13日 评论:

1.examples/torch/bench_mc2_vs_tp.py库上没找到
2.非目标里的MoE / Attention 路径的 MC2 融合。是指MoE / Attention里不能apply() 将 nn.Linear 原地替换为 MC2Linear吗?如果apply了是会报错还是没效果?
3.与其他特性的交互?

likedislike
changzherui
changzherui成员
8月13日 评论:

补充一组 PyTorch / Ascend 本地性能对照(MC2 vs 非融合 ColwiseParallel / RowwiseParallel),用于说明什么场景有收益、什么场景可能劣化。本期 Issue 明确未覆盖正式多机 E2E 吞吐报告,以下为单机 910B3 上的定向 A/B,供评审参考。


测试环境

设备 Ascend 910B3(HBM 64GB)
CANN 9.1.0
框架 PyTorch 2.7 + torch_npuHYPER_PARALLEL_PLATFORM=torch
dtype bfloat16
对照 相同权重、相同 TP+SP plan;仅 Linear 是否走 MC2 Style
计量 warmup=3,iters=10,npu.synchronize 后取平均墙钟

对照网络与 PR 一致:

  • MLP 堆叠examples/torch/bench_mc2_vs_tp.py):fc1 Column + fc2 Row
  • Llama3 SwiGLU FFNparallelize.py):w1/w3 Column + w2 Row;Attention 始终非融合
  • Llama3 block:Attention 非融合 + MLP 可选 MC2(即 enable_mc2=True 的真实覆盖面)

示例 Llama3DemoConfig(dim=256) 不满足 Column 反向 n_local≥256(TP=2 时 FFN=256 → n_local=128),未纳入本表。


结果(正数 = MC2 更快)

场景 结构 H / FF / seq / B / layers TP 前向 前向+反向
PR 大 MLP fc1+fc2 8192 / 28672 / 4096 / 2 / 4 2 +14.1% +11.3%
Llama3 SwiGLU 7B 档 w1/w3/w2 4096 / 11008 / 2048 / 2 / 4 2 +8.9% +3.6%
Llama3 SwiGLU 70B 档 w1/w3/w2 8192 / 28672 / 2048 / 2 / 2 2 +6.4% −10.4%
Llama3 整 block(Attn 非融合 + MLP MC2) 7B 档 4096 / 11008 / 1024 / 1 / 2 2 +12.3% +13.1%
短序列 + 大 GEMM fc1+fc2 8192 / 28672 / 128 / 2 / 4 2 +18.4% −6.8%
kernel 边界小 shape fc1+fc2 512 / 512 / 128 / 2 / 8 2 +61.6% +61.0%
中小 MLP fc1+fc2 1024 / 2816 / 256 / 2 / 8 2 +59.1% +59.0%
更大 TP fc1+fc2 4096 / 11008 / 2048 / 2 / 4 4 +41.0% +22.2%

本组 前向全部正向。训练(fwd+bwd)出现回退的是:短序列大 GEMM、以及 70B 档 SwiGLU。

小/中 shape 上 2.4–2.6x 主要来自少掉 DTensor 独立 AG/RS + nn.Linear 的调度,不完全是通算流水本身。


什么场景有收益

  1. 纯 MLP / FFN 占比高
    PR 推荐的大 MLP 长序列(8192 / 28672 / seq=4096)前向约 +14%,训练约 +11%。
  2. 通信与框架调度相对明显
    层数多、shape 未大到纯计算墙;或 TP 更大(同 7B 档 MLP:TP=2 训练约 +4%,TP=4 前向 +41%、训练 +22%)。
  3. Llama3 在 enable_mc2 真实覆盖面下
    Attention 不走 MC2,但 FFN 仍占时间。7B 档 2 层 block、seq=1024 时整 block 训练约 +13%。
  4. 只跑前向 / 推理
    本组前向均加速,包括训练会回退的两个 case。

什么场景没有收益(或会劣化)

  1. 大 GEMM + 短序列的训练
    seq=128、FFN=28672:前向仍 +18%,fwd+bwd −6.8%。计算已很重、通信量相对小,融合反向(Column MRS 收缩维为很大的 n_local)不如分离 GEMM+通信。
  2. 大 SwiGLU 的训练
    70B 档 FFN(3 个 Linear + SiLU):前向 +6%,fwd+bwd −10.4%。比 2-linear MLP 多一次 Column 融合反向,SiLU 也不在 MC2 内。
  3. Attention / MoE 占绝对大头的端到端
    本期不融 q/k/v/o 与 MoE。seq 更长、层数更多时 SDPA 会进一步稀释 MLP 收益;正式全模型吞吐仍未覆盖。
  4. 约束不满足,不应启用(不是变慢,是跑不了或 fail-closed)
    • 无 Sequence Parallel
    • 示例级 dim=256n_local<256
    • dtype 非 fp16/bf16、world_size 不在 {2,4,8}、收缩维不在 [256, 65535)
    • 单卡 / 非 Ascend / MindSpore 后端

选用建议

优先开 MC2:Ascend + TP+SP + 合法 shape + MLP/FFN 为主;更长序列、更大 TP、前向/推理
建议 A/B:很短 seq + 很宽 FFN 的训练;70B 级 SwiGLU 训练
不要开:dim 过小、无 SP、dtype/world_size/k 不合法

结论:MC2 在 PR 的 MLP / Llama3 FFN 路径上 有可测收益,默认关闭是合理的。收益随拓扑变化:前向更稳;训练在短序列大 GEMM 和大 SwiGLU 上可能回退。正式 E2E 吞吐报告仍按 Issue 非目标留后续。

likedislike
changzherui
changzherui成员
8月13日 评论:

1.examples/torch/bench_mc2_vs_tp.py库上没找到
2.非目标里的MoE / Attention 路径的 MC2 融合。是指MoE / Attention里不能apply() 将 nn.Linear 原地替换为 MC2Linear吗?如果apply了是会报错还是没效果?
3.与其他特性的交互?

@nihui11

  1. 例子看这个吧:tests/torch/tensor_parallel/_test_mc2_distributed.py
  2. 必须是 nn.Linear,否则 apply()会报 NotImplementedError
  3. mc2是TP的一种,和其他特性正交,没有影响
likedislike
changzherui
changzherui成员
8月13日 评论:

python -m torch.distributed.run --nproc_per_node=2 --master_port=29581
examples/torch/bench_mc2_vs_tp.py

likedislike