Skip to content
cccskills
FreePublished on GitHub

env-install

环境安装与准备:把部署环境从零安装就绪——mindiesd 编译安装(本地昇腾直装 / SSH 推远端容器 / Docker 镜像直装)与三方推理框架全栈安装(vLLM-Omni 源码构建、DiffSynth-Engine 部署、 LightX2V editable 部署),并负责模型权重确认与下载(下载前先确认远端是否已存在)。

不含特性使能与验证 (framework-integration)与 profiling(profiling-collect);SSH 工具由 remote-access 提供。

当用户需要安装 MindIE-SD、源码构建/直装 vLLM-Omni 或 LightX2V(editable + PLATFORM=ascend_npu)、 或确认/下载模型权重时使用此技能; 即使用户只提到"把代码推到服务器""在容器里装 vllm 全栈""准备 lightx2v 调优环境"而未说昇腾, 只要上下文涉及环境安装与准备都应触发。

由 model-auto-optimization S0 与 dev-workflow 部署阶段指引加载。

The English summary is being prepared. Showing the original description.

Works withDocker
See how to install

Files included (7)

  • SKILL.md30.6 KB
  • evals/evals.json8.9 KB
  • references/lightx2v-env.md5.0 KB
  • references/troubleshooting-env.md11.5 KB
  • references/vllm-omni-build.md9.3 KB
  • references/weights-prep.md11.7 KB
  • scripts/deploy_to_remote.py8.3 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

环境安装与准备

定位

本技能是能力层的「环境安装与准备」技能,覆盖两端职责:

  • 安装部署环境:mindiesd 编译安装(本地昇腾直装 / SSH 推远端容器)+ 三方推理框架全栈安装 (vLLM-Omni 源码构建、DiffSynth-Engine 部署)。
  • 模型权重确认/下载:三方框架跑真实权重前,把权重从 modelscope 下载到远端容器并校验完整。

分工边界:

  • remote-access:提供 SSH/SFTP 连接、传输与容器执行等远程工具;本技能决定「装什么、怎么装」, remote-access 决定「怎么连、怎么传」。本技能内的 deploy_to_remote.py 也可独立使用。
  • framework-integration:特性使能与框架侧验证(服务启动、特性开关、推理验证); 本技能止于安装完成(import mindiesd 成功、版本配套就位、权重就位)。
  • dummy-run:随机权重模型验证,不需要真实权重;本技能不为其下载权重。
  • profiling-collect:性能 profiling 采集;本技能不含。

越界问题去哪(本技能只留指针,不展开):

症状 / 需求归属
SSH / 认证 / CRLF / 传输域 / Windows 开发机 schannelremote-access/SKILL.md「故障排查」表 + ../remote-access/references/transport-troubleshooting.md
服务启动 / 运行入口(vllm serve、torchrun)/ 请求级 task 档位 / 档位报错回退../framework-integration/references/run-entry-and-request-tiers.md
特性使能不生效 / 计数契约 / 三层证据 / 回退判据../framework-integration/SKILL.md §1
显存不足选哪一档降 / 使能档 crash 退到哪一档../dit-perf-opt/references/resource-fallback-tiers.md
多卡运行期劣化 / 端口 bind / 热降频与 clean-window 口径 / 拓扑选卡../dit-parallel-opt/references/ascend-topology-bandwidth-diag.md §1–§5
自研算子运行期不可见(inferShape does not exist)/ golden 校验../operator-dev/references/custom-op-runtime-deploy-verify.md
输出异常与精度判定(NaN / 黑图 / 花屏 / eager vs compiled)accuracy-gate(../accuracy-gate/references/silent-failure-localization.md、../accuracy-gate/references/equivalence-criteria.md)
测点口径 / 报数与入库perf-gate
随机权重快验(不需要真实权重)dummy-run

本技能止于安装完成:import mindiesd 成功、版本配套就位、权重就位即交接; 上表问题在安装过程中发现时只做记录与转交,不在本技能内解决。

触发:当用户需要部署安装 MindIE-SD、在远端容器内装三方框架全栈或确认/下载模型权重时使用本技能; 即使用户只提到"把代码推到服务器""在容器里装 vllm 全栈",只要上下文涉及环境安装与准备都应触发。 由 model-auto-optimization 的 S0 阶段调用,亦由 dev-workflow 的部署阶段指引加载。

安装路径总览

你当前在哪里?
├─ 已在昇腾设备上 → 走「MindIE-SD 编译安装」本地直装路径
├─ 本地开发机,远端昇腾容器已就绪 → 「部署脚本」增量推送 + 容器内编译安装
├─ 已有可用容器/镜像,或官方预构建镜像覆盖目标芯片 → 「Docker 镜像直装」直接使用(容器内按需补装 mindiesd)
├─ 目标用 vLLM-Omni 托管扩散模型(Qwen-Image / Wan / MiniMax-H3 等;镜像未覆盖目标机型时)→ 「三方框架全栈安装」
├─ 目标跑 LightX2V(editable 源码 + mindiesd 同容器)→ 「三方框架全栈安装」→ LightX2V 部署要点
├─ 三方框架需要真实权重 → 「权重确认与下载」(先确认远端已存在,存在则跳过)
└─ 只需随机权重快速验证架构 → dummy-run(本技能不下载权重)
路径场景编译位置
本地昇腾直装已在昇腾设备上本机执行 python setup.py build_py && pip install -e .
SSH 推远端容器本地开发机 → 远端昇腾 Docker 容器scripts/deploy_to_remote.py 增量传输后在容器内编译
Docker 镜像直装官方预构建镜像已覆盖目标机型/架构(用 npu-smi info -l 确认型号与架构后核对镜像覆盖面),或已有可用容器/镜像镜像内环境已就绪 → 免编译,容器内 pip install mindiesd;需自定义时才按需补装

三条路径共用同一份「MindIE-SD 编译安装」流程与「兼容性前置检查」;镜像直装路径在镜像内 CANN/torch/torch_npu 已就绪时免源码构建(仅补装 mindiesd),只有镜像内缺失基础环境或需改动 框架源码时才回到编译安装/源码构建;远端路径额外需要部署脚本与部署前参数确认(见「部署脚本」)。

远端前置(本地 → 远端路径)

部署前必须向用户确认以下信息(无默认值,禁止猜测):

参数说明
远端 IP / 用户名 / 密码SSH 登录信息(底层连接工具由 remote-access 提供)
远端工作目录代码存放路径
Docker 镜像已配置好 CANN+PyTorch 的镜像(从 GitCode 或官方文档验证最新版本)
容器名 / 容器状态已运行 / 需新建;容器内外路径映射是否一致

确认阻断点:镜像版本、容器配置等未经验证的参数必须由用户确认后方可执行。

远端: {IP} / {容器名} / {工作目录} 镜像: {镜像名}(从 GitCode 或官方文档验证最新版本) NPU 可用卡数: {空闲数} / {总数}(通过 npu-smi info -l 确认) 是否继续? [Y/N]

Docker 镜像直装路径

适用场景(镜像内环境已就绪时直接使用,或在容器内按需补装 mindiesd):

  • 官方预构建镜像已覆盖目标机型/架构(如 quay.io/ascend/vllm-omni:*,覆盖面以镜像 tag 说明为准, 用 npu-smi info -l 确认型号与架构后核对): 镜像内 CANN/torch/torch_npu 与 vLLM-Omni 全栈已就绪,可直接使用镜像、免源码构建;缺 mindiesd 时补装。
  • 目标机型(x86_64 等)无官方全栈镜像:可用 CANN 基础镜像(如 cann:<版本>-*)起容器, 再按本技能「MindIE-SD 编译安装」源码路径补装,或参考 references/vllm-omni-build.md 源码构建 vLLM-Omni 全栈。

docker run 直装要点(容器创建时一次配好,避免事后反复 docker cp):

# 方式一:Ascend Docker 运行时(自动注入设备),仍须显式挂载 HCCL ranktable 目录
docker run -it --rm --runtime=ascend \
  -v /usr/local/Ascend/driver/topo:/usr/local/Ascend/driver/topo \
  -v {model_weight_dir}:/workspace/model_weight \
  quay.io/ascend/vllm-omni:{tag}
  • 无 Ascend Docker 运行时:手动加 --device=/dev/davinci0、--device=/dev/davinci_manager、 --device=/dev/hisi_hdc、--device=/dev/devmm_svm 与 -v /usr/local/Ascend/driver:/usr/local/Ascend/driver (topo / 权重挂载同上)。
  • 必须挂载 HCCL ranktable 目录 /usr/local/Ascend/driver/topo(含按目标设备代际生成的 *.json ranktable 文件,文件名按目标机型现场核对、勿照抄): 缺失时多卡启动报 hcclCommInitRootInfoConfig error code is 4(见本文件「故障排查」表与 references/vllm-omni-build.md Step 2.1);已运行的容器可 docker cp 补挂 /usr/local/Ascend/driver/topo 到 {容器}:/usr/local/Ascend/driver/topo。
  • 同时挂载模型权重根目录 {model_weight_dir}:/workspace/model_weight:容器内外路径语义一致、服务直接 serve;起容器前先按「权重确认与下载」确认权重是否已存在(存在则复用,同款原则)。
  • 容器内先验证环境再补装(避免驱动/设备未就绪时白跑安装),命令如下:
npu-smi info -l   # NPU 卡可见(驱动与设备挂载正确)
python -c "import torch, torch_npu; print(torch.__version__, torch_npu.__version__, torch.npu.device_count())"

镜像内已带 CANN/torch/torch_npu 时,无需源码构建基础环境,只需容器内补装 mindiesd:直接 pip install mindiesd,或按「MindIE-SD 编译安装」源码安装 python setup.py build_py && pip install -e . (源码需挂载/拷入容器,注意「上传打包规则」勿排除源码树 build/ 目录)。

拉取注意事项(镜像较大、多架构、内网/代理都会影响拉取,先确认再动手):

  • 多架构 manifest:quay.io/ascend/vllm-omni:* 等多架构仓库默认按宿主架构拉取;x86_64 宿主上 aarch64-only 镜像不可用时不要硬 --platform,改走源码构建路径。
  • 内网/代理:先确认拉取源可达(registry mirror / 代理);大镜像用 docker pull --retry 或后台拉取, 避免 SSH/终端断连中断传输。
  • 与本地已有镜像/容器复用:起新容器前先确认是否已有可用镜像或容器(docker images / docker ps -a), 能复用就不重拉/重装——与「权重确认与下载」先确认再下载是同一原则。

直装 vs 源码构建(一句话取舍):官方镜像已覆盖目标机型/架构时直装省时(免源码构建); 镜像未覆盖目标机型(如以 x86_64 为目标而镜像只覆盖 aarch64)、或需要改动 vllm / vllm-omni / mindiesd 框架源码时,走「三方框架全栈安装」源码构建路径。

MindIE-SD 编译安装

本地直装与远端容器内编译的流程一致,以下步骤通用。编译前先 source CANN 环境。

兼容性前置检查

远端容器内验证环境版本兼容性:

# PyTorch + TorchNPU 版本匹配
docker exec {容器名} bash -lc 'python -c "
import torch, torch_npu
print(f\"PyTorch={torch.__version__}, torch_npu={torch_npu.__version__}\")
assert torch_npu.__version__ >= \"2.6\", \"torch_npu too old\"
"'

# CANN 环境
docker exec {容器名} bash -lc 'source /usr/local/Ascend/ascend-toolkit/set_env.sh && \
    cat /usr/local/Ascend/ascend-toolkit/version.cfg 2>/dev/null | head -3'

本地路径直接用 python -c + source set_env.sh 验证。

检查项最低要求不满足时
PyTorch>= 2.6升级 PyTorch 版本
TorchNPU>= 2.6,与 PyTorch 主版本匹配升级 TorchNPU
CANN>= 9.0.0,含 bisheng 编译器升级 CANN SDK
Python>= 3.10升级 Python
cmake / build / wheel可用pip install cmake build wheel

版本不匹配时中止,参考「故障排查」表或 references/troubleshooting-env.md。

编译依赖(远端容器内最低编译条件)

依赖要求
CANN>= 9.0.0,含 bisheng 编译器
Python>= 3.10
PyTorch>= 2.6,且与 TorchNPU 主版本一致;全栈组合以框架侧锁定的 torch 版本为起点反查(对应关系与已复现快照见 references/vllm-omni-build.md「版本配套矩阵」),勿按机型硬记
TorchNPU与 PyTorch 版本匹配
triton / triton-ascendAscend 版 triton,版本与所选 torch 配套(部署使用时需要;取值现场取证)
环境变量source /usr/local/Ascend/ascend-toolkit/set_env.sh
编译工具cmake, build, wheel(pip install build wheel)

build_tik_ops.sh 规避

⚠️ build_tik_ops.sh 在部分环境会失败(参考 issue#64), 部署前注释掉 build/build_ops.sh 中的对应行:

# 修改前
source ${current_script_dir}/build_tik_ops.sh
# 修改后
# source ${current_script_dir}/build_tik_ops.sh

容器内可用 sed 一键完成等效修改(注意行首缩进:该行缩进量随脚本版本变化, 用 ^source 硬锚的写法会静默不生效,故锚点须容忍前导空白):

sed -i 's|^\([[:space:]]*\)source \(.*build_tik_ops\.sh\)|\1# source \2|' build/build_ops.sh
grep -n "build_tik_ops.sh" build/build_ops.sh   # 复核:该行须已带注释符

如何判定该问题仍存在(换版本后先复核,再决定是否绕行):直接跑一次 bash build/build_ops.sh(或跳过本步骤对比),若 build_tik_ops.sh 正常返回 0 且产物齐全, 说明上游已修复 —— 此时不要再注释,删掉本条绕行;仅当其仍失败(或报 issue#64 同类错误)时才套用。

编译 + 安装

远端(Docker 容器内):

docker exec {容器名} bash -lc '
source /usr/local/Ascend/ascend-toolkit/set_env.sh &&
cd {工作目录}/MindIE-SD &&
pip install build wheel -q &&
python setup.py build_py &&
pip install -e . &&
echo DEPLOY_SUCCESS
'

本地(已在昇腾设备上):

source /usr/local/Ascend/ascend-toolkit/set_env.sh
cd {项目根目录}
pip install build wheel -q
python setup.py build_py
pip install -e .

上传打包规则

⚠️ 上传打包时不要排除源码树中的 build/ 目录(含 build_ops.sh / build_plugin.sh 等脚本), 否则 python setup.py build_py 报 No such file or directory: .../MindIE-SD/build。 deploy_to_remote.py 的排除列表只过滤编译产物子目录(build/build/、build/output/、 build/vendors/、build/custom_project_tik/、mindiesd/ops/、mindiesd/plugin/、 docs/_build/)与 .git/__pycache__/dist/egg-info 等,不会排除源码 build/ 本身。

验证安装

# 远端
docker exec {容器名} bash -lc 'python3 -c "import mindiesd; print(mindiesd.__version__)"'

# 本地
python -c "import mindiesd; print(mindiesd.__version__)"

编译原理与何时重装

python setup.py build_py 执行以下步骤:

  1. 通过 build/build_ops.sh 编译 AscendC 自定义算子(laser_attention, la_preprocess 等)
  2. 通过 build/build_plugin.sh 用 cmake 编译 C++ PyTorch 插件,生成 .so 文件
  3. 将编译产物拷贝到 mindiesd/plugin/ 和 mindiesd/ops/

pip install -e . 以可编辑模式安装,使代码修改即时生效。

pip install -e . 仅在以下目录有新增或变更时才需要重新执行:

  • mindiesd/ — Python 包源码索引需刷新
  • csrc/ — C++ 源码需重新编译为 .so
  • build/ — 编译脚本变更

若变更仅涉及 examples/、tests/、docs/ 等非包目录,可跳过此步骤, 直接使用远端已有的安装版本。

三方框架全栈安装(vLLM-Omni 源码构建 + DiffSynth-Engine + LightX2V)

当目标是在远端容器内用 vLLM-Omni 托管扩散模型(Qwen-Image-2512 / Wan2.2 / MiniMax-H3 等), 需安装完整栈 torch + torch_npu + vllm + vllm-ascend + vllm-omni + mindiesd。⚠️ 官方预构建镜像 (quay.io/ascend/vllm-omni:*)覆盖面以镜像 tag 为准(历史版本只覆盖 aarch64),镜像不含目标 机型/架构时必须从源码构建。示例(某条已复现组合,完整版本快照见会话产物归档):以框架侧锁定的 torch 版本为起点 → 配套 torch_npu → vllm 源码构建 → vllm-ascend → vllm-omni → mindiesd。

完整构建流程(版本配套矩阵、Step 2.1–2.6 分步命令、内联已知坑与 ⚠️ 警告,含 setuptools 升级 / rust 跳过 / numpy 阿里云镜像等)见 references/vllm-omni-build.md。加载时机:需要源码构建 vLLM-Omni 全栈(镜像未覆盖的目标机型)或排障 vllm / vllm-ascend / vllm-omni 构建问题时,加载该 reference 执行。

DiffSynth-Engine 部署要点

diffsynth_engine(Qwen-Image 等扩散模型的独立推理框架)接入 MindIE-SD compile 前, 先把框架包部署到远端容器:

  • 纯 Python 包、无需编译:无 setup.py build_py / CANN 构建步骤,增量传输源码后 pip install -e . --no-deps 即可(安装要点见 deploy_to_remote.py 的传输姿势)
  • ⚠️ vLLM 全栈两者的源码安装参数不同,勿合并成一组(源码构建口径): vllm-ascend(releases/v0.26.0rc)用 pip install -e . --no-deps --no-build-isolation; vllm-omni(main)用 VLLM_OMNI_TARGET_DEVICE=npu pip install -e . --no-build-isolation —— 不带 --no-deps。差异的完整步骤见 references/vllm-omni-build.md §2.4/§2.5
  • ⚠️ --no-deps 的原因:pyproject 锁旧版 transformers==4.57.6 / diffusers==0.36.0, 而容器内是较新版本(vllm-omni / mindiesd 依赖)——带依赖安装会把容器环境降级破坏; 装完用框架自有的 import 兼容检查确认可导入(如 Qwen2_5_VL / QwenImagePipelineOutput 等)
  • 无 .git 时 setuptools-scm 报错 → SETUPTOOLS_SCM_PRETEND_VERSION_FOR_DIFFSYNTH_ENGINE=1.0.0
  • mindiesd 用 compile 工作区:脚本内 sys.path.insert(0, "{工作区}/mindie-sd-compile") (避免用 pip 替换容器内已装 mindiesd,替换会波及共享该容器镜像的其他框架依赖)
  • 真实权重就绪:DiffSynth-Engine 的 Qwen-Image 用 diffusers 布局权重目录 (transformer/vae/text_encoder/tokenizer/scheduler + model_index.json),确认见 weights-prep

compile 适配(compile_backend="mindie"、_compiled_call_impl 写入、text encoder key 归一化等)与融合算子使能判断属 framework-integration,不在本技能范围。

LightX2V 部署要点

LightX2V 与 vLLM-Omni 形态不同:editable 源码 + PLATFORM=ascend_npu 环境变量,无独立服务进程:

  • lightx2v 与 mindiesd 都在同一容器内 pip install -e(源码目录);更新代码(rsync 新文件)后 无需重装、重启进程即生效
  • ⚠️ import lightx2v 前必须 export PLATFORM=ascend_npu:否则设备初始化按默认平台走, 报 ERR99999 UNKNOWN application exception 类异常
  • 版本配套矩阵、就绪验证、模型权重分区(按目标形态只需其中一部分权重,具体清单见 reference): 见 references/lightx2v-env.md

运行入口不属本技能:torchrun 命令与 --config_json 档位语义(含档位报错回退)见 framework-integration/references/run-entry-and-request-tiers.md §2;并行档位形态选择归 dit-parallel-opt。本技能止于环境就绪(PLATFORM=ascend_npu 下 import 成功、版本配套、权重就位)。 LightX2V 侧 compile 使能(compile_backend / hccl_eager)与 kernel diff 方法属 framework-integration,不在本技能范围。

权重确认与下载

⚠️ 部署/准备时,先与用户确认远端环境是否已存在该模型权重或可复用服务(例如 {model_weight_dir}/{模型名}/ 已完整、或该模型已在别的容器/服务中 serve)。 存在则跳过下载,直接复用路径;只有确认缺失才执行下载。

完整流程见 references/weights-prep.md,速览:

  • 何时需要:三方框架(vLLM-Omni / LightX2V / DiffSynth-Engine / diffusers)需要真实权重时; dummy run(随机权重)不需要,见 dummy-run。
  • 下载源优先级:默认 modelscope(modelscope download / snapshot_download + local_dir 直落;国内可达、HF gated 仓库在 modelscope 镜像通常免鉴权);次选 HuggingFace / 其他 gated 仓库(需 token:hf auth login / HF_TOKEN,或 hf-mirror 镜像)。判据与两种用法见 references/weights-prep.md §2.1。
  • 目录约定:{model_weight_dir}/{模型名}/{任务变体}/,模型根目录直接 serve;仓库内 FL2VA/、Ref2VA/ 等子目录 = vLLM-Omni 格式,按任务分区下载。 各模型实测落位见 references/weights-prep.md §2.2 落位表 (H3 有实测记录;Qwen-Image / Wan2.2 / FLUX 的仓库 id 与任务变体列未实测——留空、不推测)。 ⚠️ LightX2V t2av 运行不需要 FL2VA(135G,其他任务组件),其实际分区口径见 references/lightx2v-env.md §5。

核心命令(MiniMax-H3 T2VA 示例):

# 容器内(modelscope 未预装时先装)
python -m pip install -U modelscope

# 按分区下载到模型根目录
modelscope download MiniMax/MiniMax-H3 \
  --local_dir {model_weight_dir}/MiniMax-H3 \
  --include 'FL2VA/**' --max-workers 16
  • --local_dir:直接落盘布局(无 snapshot 哈希嵌套),模型根目录直接 serve,服务路径稳定。
  • --include '{分区}/**':只拉所需分区;不带则拉全仓库,徒增存储。
  • --max-workers 16:并发流数;初期 ramp-up 慢,以稳定段速率估算 ETA。

后台化 + 监控(SSH 断开不中断):

# 容器内 nohup 后台(docker exec -d 使下载进程脱离 SSH 会话)
nohup modelscope download MiniMax/MiniMax-H3 \
  --local_dir {model_weight_dir}/MiniMax-H3 \
  --include 'FL2VA/**' --max-workers 16 \
  > {model_weight_dir}/h3_download.log 2>&1 &
echo $! > {model_weight_dir}/h3_download.pid

⚠️ 轮询脚本自身也要 nohup:SSH 连接重置(client_loop: send disconnect: Connection reset) 会杀掉未脱离会话的宿主进程;但容器内 nohup 的下载进程不受影响,无需重启下载。

完成判定(三者齐备):① modelscope 进程退出(pgrep 为 0);② find {root} -name '*.incomplete' 为 0;③ 日志尾部出现 Snapshot ready at {root}。

完整性校验(详见 references/weights-prep.md §5):

检查项命令 / 依据通过标准
目录大小du -sh {root}与仓库说明一致(FL2VA ≈ 134–135G)
分区入口ls {root}/FL2VA/model_index.json存在(vLLM-Omni 用分区识别)
残留未完成find {root} -name '*.incomplete' | wc -l0
文件总数find {root} -type f | wc -l与下载进度 "81/81" 一致
校验和仓库提供 *.md5 / *.sha256 / checksums.json 时逐文件核对一致;无校验和文件时以「无 .incomplete + 分片齐全 + 文件数一致」为准
下载日志tail 日志100% ... 81/81 + Snapshot ready

已知坑:

  • DNS/超时重试警告(易误报):容器 DNS 抖动时日志出现 urllib3.connectionpool: Retrying ... NameResolutionError / ReadTimeoutError, modelscope 自动重试成功,非致命。grep -i error 会把 WARNING 行误报为错误—— 判断失败必须区分 WARNING(可忽略)与 ERROR/Traceback(才需处理)。
  • .incomplete 后缀:下载中的 safetensors 带 .incomplete 后缀,完成后自动去除; 该后缀文件不计入最终文件数。
  • 分片缺失:框架启动报 ValueError: ... weights were not initialized from checkpoint 时, 对照 *.safetensors.index.json 的 weight_map 逐个核对分片,缺失的从 hf-mirror / modelscope 补下载。
  • 模型仓库双格式混用:vLLM-Omni 部署目录(如 {root}/FL2VA)不能当 dummy run 的 --config_cache(类名/配置键不兼容)。

权重就位后按「落位约定」的模型根目录可直接被框架 serve / 加载(路径语义见 references/weights-prep.md §7); 服务启动与请求级档位不属本技能(vllm serve 目标二选一、--task-type、extra_params.task 请求级切换、换档后的生效复核)→ framework-integration/references/run-entry-and-request-tiers.md §1。

部署脚本

scripts/deploy_to_remote.py 是本技能的部署主脚本(本地开发机 → 远端昇腾容器)。 SSH 通道复用 remote-access/scripts/ssh_helper.py(同一凭据来源优先级 + 同一主机密钥纪律 + 同一条"stdout/stderr 并发读取"防死锁实现)——因此运行该脚本要求 .agents/skills/ 下 remote-access 技能同时存在;缺它脚本会直接报错退出并给出提示。

命令行参数:

参数必填说明
--host✓远端服务器 IP
--user✓SSH 登录用户名
--password可选不推荐:会留在进程列表 / shell history。凭据优先级 = 环境变量 MINDIE_SD_SSH_PASSWORD / MINDIE_SSH_PASSWORD > 交互式输入(不回显)> --password
--workspace✓远端工作目录
--container✓远端容器名
--local-root✓本地源码根目录
--allow-unknown-host可选首次接入陌生主机时才加:默认 RejectPolicy(未知主机密钥直接拒绝,防中间人)

执行传输 + 编译(推荐用环境变量给凭据):

export MINDIE_SSH_PASSWORD='***'          # 或用交互输入(省略 --password)
python deploy_to_remote.py --host <远端IP> --user {用户名} \
  --workspace {远端工作目录} --container {容器名} \
  --local-root {本地源码根目录}

脚本自动完成:

  1. 收集本地文件:按排除规则过滤(.git、__pycache__、dist、egg-info、 build/ 下编译产物子目录、mindiesd/ops/、mindiesd/plugin/、docs/_build/ 等)
  2. CRLF 换行符处理:文本文件(.py/.sh/.json/.txt/.md/.yaml/.yml/.cfg) 传输时 CRLF→LF,转换仅作用于远端副本,不在本地修改源码换行符(避免无意义 git diff)
  3. 增量传输:远端已存在且大小相同的文件跳过;缺失目录自动 mkdir -p
  4. 容器内编译:docker exec {容器名} bash -lc 'cd {workspace} && source set_env.sh && cd MindIE-SD && pip install build wheel -q && python setup.py build_py && pip install -e . && echo DEPLOY_SUCCESS'

完成后检查输出中的 DEPLOY_SUCCESS。

⚠️ 路径语义核对:脚本把文件传到 {workspace}/{local_root.name} (如 /home/{user}/code/MindIE-SD_compile),但构建命令固定 cd {workspace}/MindIE-SD。 若远端实际布局与本仓约定(如 /home/{user}/code/mindie-sd-compile)不一致,不要直接用该脚本, 改精准 SFTP 同步;另外 refs/ 等大目录不在脚本排除列表,全量传输会带上 profiling 数据。 ⚠️ 传输完成前不要独立多次开 SSH 连接(远端 MaxStartups 限制会拒绝访问), 遵循连接复用原则(单个连接从传输到验证全程复用)。

故障排查

高危问题速查(完整决策树见 references/troubleshooting-env.md):

症状原因解决
编译失败CANN 环境未 sourcesource /usr/local/Ascend/ascend-toolkit/set_env.sh
build_ops.sh exit code 101build_tik_ops.sh 失败注释掉 build_ops.sh 中 source build_tik_ops.sh 行
import triton 成功但 0 active drivers安装了标准 triton(非 Ascend 版本)pip uninstall triton -y && pip install triton-ascend && pip install pybind11
ModuleNotFoundError: mindiesdpip install -e . 未重新索引重新执行 python setup.py build_py && pip install -e .
vllm 多卡启动报 hcclCommInitRootInfoConfig error code is 4容器缺 HCCL ranktabledocker cp /usr/local/Ascend/driver/topo {容器}:/usr/local/Ascend/driver/topo 或挂载(见 references/vllm-omni-build.md Step 2.1)

本表只收安装 / 部署域(装起来 + 权重备齐)。越界症状一律去对应技能,本技能不展开: SSH / 认证 / CRLF / 传输域 / Windows 开发机 schannel → remote-access/SKILL.md「故障排查」表与 ../remote-access/references/transport-troubleshooting.md;服务启动 / 运行档位 / 请求级 task → ../framework-integration/references/run-entry-and-request-tiers.md;特性不生效 / 使能回退 → ../framework-integration/SKILL.md §1;显存不足选哪一档 / 档位 crash 退到哪一档 → ../dit-perf-opt/references/resource-fallback-tiers.md;多卡运行期劣化 / 热降频口径 / 拓扑 → ../dit-parallel-opt/references/ascend-topology-bandwidth-diag.md §1–§5;自研算子运行期不可见 / golden → ../operator-dev/references/custom-op-runtime-deploy-verify.md;输出异常 / 精度判定(NaN / 花屏 / eager vs compiled) → ../accuracy-gate/references/silent-failure-localization.md; 测点与报数口径 → perf-gate。 完整归属表与安装域决策树见 references/troubleshooting-env.md;vLLM-Omni 全栈构建期问题另见 ../framework-integration/references/troubleshooting-vllm-omni.md。

Reference Files

  • references/weights-prep.md — 加载时机: 三方框架需要真实权重时(下载源优先级:默认 modelscope、HF/gated 次选;目录/分区约定与各模型落位表 §2.2(未实测的格子留空、不推测); 下载命令、nohup 后台化、完整性校验、已知坑;§7 只讲"权重就绪"的交接语义)
  • references/lightx2v-env.md — 加载时机: 部署/复现 LightX2V 调优环境(editable 安装、 PLATFORM=ascend_npu、版本配套矩阵、就绪验证、MiniMax-H3 t2av 权重分区)时 (运行入口与 --config_json 档位不在本文件 → ../framework-integration/references/run-entry-and-request-tiers.md §2)
  • references/troubleshooting-env.md — 加载时机: 部署/编译/安装遇到异常,需系统排查定位根因时 (安装 / 部署域决策树 + 越界归属表:服务启动、使能、选档、多卡归因、精度判定、传输域 均只留指针,不在本文件展开)
  • references/vllm-omni-build.md — 加载时机: 需要源码构建 vLLM-Omni 全栈(镜像未覆盖的目标机型)或排障 vllm / vllm-ascend / vllm-omni 构建问题时(版本配套矩阵、Step 2.1–2.6 全量细节)

维护与更新

当远端昇腾环境变化(torch/TorchNPU 版本升级、CANN SDK 更新)、vllm/vllm-ascend/vllm-omni 版本矩阵变化、源码构建路径调整、modelscope 下载流程或容器配置调整、或发现新的安装/部署问题时, 按 dev-workflow 的复盘流程更新本 skill。

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

**精度验收标准**:凡是"改动不应改变结果"的场合(等价替换、算子/子模块融合、并行切分、 编译与图下发、拷贝消减),都按本标准判"合格 / 不合格"——等价分层(L1 逐位 / L2 数值门 / L3 有损门)+ 三级验收序(① 同配置重跑逐位 → ② 跨配置数值门 + 产物 md5 不变 → ③ 质量门)+ 判据不达标时的排障入口。当用户说"这个算子能不能换个写法/换个 kernel/等价实现/ 无损替换""替换后结果会不会变""怎么证明逐位一致""结果不对""花屏""尾部塌了" "CPU 跑对 NPU 跑不对",或发现某个 hotspot 占了大头(例如某类算子在阶段里占 90% 以上)想动手时, 都应触发;即使用户只说"这样改有没有把结果改坏""能不能判它是无损的"也应触发。 覆盖:等价分层与判据、满足本标准的实现约定(per-shape 对拍写进实现,把索引/相位/顺序类重写 错误在首次调用抓住)、per-shape 条件性等价(同一改动在不同形状下结论可能不同)、 判据不达标 → `references/silent-failure-localization.md` 排障入口、否决案例的形态学 (换写法未换 kernel / 差异极小仍非逐位 / 等价但 OOM)、以及收益口径的归属(性能数字一律交 `perf-gate`)。 **近义分流**:选量化档 / 特性选档(要不要开量化、开哪一档)→ `dit-perf-opt`; 并行选型(USP / CP / TP 怎么切)→ `dit-parallel-opt`;本技能只判"结果是否被改变", 不负责选档与选型。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

NPU 图批量下发能力(aclgraph / aclgraph_ex 家族)的开发与调优。覆盖 mindiesd 的 aclgraph_backend:NPUGraph 静态 capture、全局 graph pool、 lazy capture、专用 copy stream + event 管线、shape/dtype 校验、max_entries 驱逐。 当用户需要减少 host launch 开销、静态 shape 大 batch 场景加速、 或排查 NPUGraph replay 输入不匹配问题时使用此 skill。 即使用户只提"批量下发""graph capture""图捕获"而未说 aclgraph,也应触发; pattern/Inductor 融合(default 后端)见 pattern-dev,算子本体见 operator-dev, 本技能只覆盖图批量下发。由 dev-workflow 的编译开发阶段与 model-auto-optimization 的 图下发场景指引加载。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

MindIE-SD 核心算子(FA/BSA/GMM/MM)性能基准工具链。使用:模型优化(model-auto-optimization 的 S1/S4 选型)中用 mindie_bench 对单算子做实现级实测,按 dtype/量化档/稀疏度/形态对比 选出最优配置(产物:选型证据;稀疏度-性能曲线供 S4 稀疏度选型);开发:benchmarks/ 工具链扩展与新算子接入测试(供 operator-dev / pattern-dev 调用)。 当用户需要对比算子实现选型、新增或修改 benchmark 代码、排查 benchmark 数据异常、 给基准加算子/指标时使用;即使用户只说"benchmark 数据不对""给基准加个算子" "对比下这几个 FA 实现哪个快"也应触发;特性级方案选档请走 dit-perf-opt (本 skill 只做实现级实测)。 由 model-auto-optimization 的 S1/S4 选型场景与 operator-dev 的算子接入验证场景调用, 亦由 dev-workflow 在基准开发时指引加载。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

MindIE-SD Python 代码格式与 lint 规则。当编写、格式化、lint 检查或审查 MindIE-SD 项目的 Python 代码时使用此 skill。 即使用户只提到"提个MR"或"代码好像有 lint 问题"而未明确说格式化,也应触发;Markdown 格式问题见 markdown-lint,提交/PR 规范见 mindie-sd-community-governance。 通常由 dev-workflow 在编码阶段指引加载。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

MindIE-SD 仓库开发总入口(侧轨)。当用户进行 MindIE-SD 的任何代码开发工作时使用此 skill—— 包括但不限于写 pattern、改测试、部署到昇腾、跑 benchmark、性能分析、多卡并行、复盘归档。 模型/三方框架自动优化类任务(非本仓代码改动)由 model-auto-optimization 入口承接, 本入口只在优化流程需要新增 pattern/算子/部署代码时承接其指向的开发子任务。 即使用户未明确提到"开发流程",只要涉及 MindIE-SD 代码改动都应触发。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

分布式并行策略选型与实测(USP / CP 通信掩盖 / CFG / TP/RSP/PP 概览;含拓扑相关选型 (按实测拓扑分域条件化:域内 bulk vs 跨域 head-parallel 翻转)与 AlltoAllV 缺陷绕过)。在 model-auto-optimization 中承担 S3:优先 USP、结合拓扑带宽差异选 CP,少量 step + 多 rank 验证特性开启与掩盖(产物:并行方案 + 多 rank 证据)。当用户需要多卡并行 策略选择、**序列并行形态抉择**(纯 Ulysses vs 复合 AllGather-KV×Ulysses:按 GQA / 跨域带宽 / 形态 plumbing 条件化定胜负)、**并行 × 稀疏叠加**(seam 契约:先汇聚后稀疏、 窗口偏移、块对齐、per-head 掩码;含「稀疏看似生效实则未生效」判定)、通信掩盖调优 (含**掩盖率上限**:1-1/n 何时成立、c/f 决定的真实上限、没生效的排查)、**并行方案 差异归因**(阶段 Δ 分解 / 集合通信按 communicator 归属 / 4→8 卡线性度),或排查多卡 跑不动 / 通信暴露大 / 换卡组 / 端口 bind / HCCL 带宽验证问题时使用;**并收编原并行作用域诊断**: 改了 SP/CP/Ulysses/AllGather-KV 后**不报错但结果没变/性能没变**、或小规模能跑大规模崩 (如 Ascend EE1003 coreDim 超限)时,用本技能证明"改动到底有没有生效"(判别量逐层收窄 + 两侧对照 + 日志≠生效,见 `references/scope-effectiveness-check.md`); 即使用户只说 "多卡跑不动""通信暴露大""为什么没达到 6/7 的掩盖率""CP 和 USP 该选哪个""CP 叠稀疏 怎么不生效"而未说并行,也应触发。特性档位/接口事实见 `docs/zh/features/parallelism.md` /`usp.md`(仓内真源),框架侧开启见 framework-integration; 本技能承载选型决策、monkey-patch 掩盖与多卡诊断实测。 由 dev-workflow 多卡场景触发,亦由 model-auto-optimization 的 S3 阶段触发。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

See all skills by Ascend

Report a problem with this skill