本文介绍如何将 DAS 平台的 vLLM 镜像(海光 DCU 版)迁移到超算互联网(SCNet)Notebook 平台使用,并以 Qwen3-0.6B 为例完成推理部署验证。全文按步骤操作即可复现,文末提供可复用的适配 Dockerfile,后续 DAS 发布新镜像时一条命令即可完成迁移。

一、准备工作

开始前请确认:

  • 一台可访问 DAS 镜像仓库、安装了 Docker 的机器(用于拉取和改造镜像)
  • 超算互联网(https://www.scnet.cn )账号
  • 了解 SCNet 的《构建镜像规则》(迁移的关键依据,下文会逐步用到)

为什么需要改造镜像? SCNet 对 Notebook 镜像有明确的组件约定,外部镜像必须先补齐再上传:

组件 平台要求
SSH(openssh-server) 预装,host key 齐全,用于 SSH 登录容器
SUDO 预装,用于权限切换
Jupyter 必须位于固定路径 /opt/conda/bin/jupyter,实例启动时按此路径扫描,扫不到则创建失败

二、第一步:从 DAS 拉取镜像

DAS(多源镜像管理平台,地址:https://pypi.sourcefind.cn/docker )提供各类推理镜像的浏览和检索。以 vLLM 0.28.1rc1 的海光 DCU 版为例,在平台找到目标镜像后,按给出的地址拉取:

1
docker pull 42.228.13.241:666/jenkins/model_test_env/vllm:0.28.1rc1-ubuntu22.04-dtk26041-py3.10-sf_b075-20261008-0403

镜像基本信息:

  • 约 8.6 GB,基于 Ubuntu 22.04 + Python 3.10
  • dtk26041:海光 DCU 软件栈
  • 内置 vllm 0.28.1+dtk2604 和 vllm-hcu 平台插件

三、第二步:用 Dockerfile 改造镜像

将以下 Dockerfile 保存为 vllm-scnet.Dockerfile。基础镜像通过 ARG 参数化,以后 DAS 出新版镜像只需改 --build-arg 一个参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# vllm-scnet.Dockerfile
ARG BASE_IMAGE=42.228.13.241:666/jenkins/model_test_env/vllm:0.28.1rc1-ubuntu22.04-dtk26041-py3.10-sf_b075-20261008-0403
FROM ${BASE_IMAGE}

ARG DEBIAN_FRONTEND=noninteractive
USER root
SHELL ["/bin/bash", "-c"]

# 1. 安装平台要求的 SSH / SUDO
RUN apt-get update && \
apt-get install --no-install-recommends -y sudo openssh-server openssh-client && \
apt-get clean && rm -rf /var/lib/apt/lists/*

# 2. SSH 配置(依据 SCNet《构建镜像规则》
# https://www.scnet.cn/help/docs/mainsite/container-service/image-management/build-rules/ )
RUN mkdir -p /var/run/sshd /run/sshd /root/.ssh && \
sed -i "s/#UseDNS .*/UseDNS no/" /etc/ssh/sshd_config && \
sed -i -r "s/^(.*pam_nologin.so)/#\1/" /etc/pam.d/sshd && \
ssh-keygen -A

# 3. 安装 JupyterLab(兼容 PEP 668)
RUN pip3 install jupyterlab -i https://pypi.tuna.tsinghua.edu.cn/simple || \
pip3 install --break-system-packages jupyterlab -i https://pypi.tuna.tsinghua.edu.cn/simple

# 4. 软链接到平台固定扫描路径,并在构建期验证
RUN mkdir -p /opt/conda/bin && \
ln -sf "$(which jupyter)" /opt/conda/bin/jupyter && \
/opt/conda/bin/jupyter --version

# 5. 启动配置:清掉 vLLM 自带的 ENTRYPOINT,使用平台推荐的 Jupyter 启动命令
ENTRYPOINT []
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]
EXPOSE 8888

各步骤说明:

  1. SSH/SUDO:平台登录容器和权限管理的必需组件
  2. SSH 配置:生成 host key(ssh-keygen -A)、创建运行目录、关闭 UseDNS、注释 pam_nologin,均为官方规则要求的动作
  3. JupyterLab:pip 安装;--break-system-packages 兜底新版 Python 的 PEP 668 限制
  4. 软链接:平台只扫描 /opt/conda/bin/jupyter,链接后构建期立即验证,装不好直接构建失败
  5. ENTRYPOINT []:vLLM 镜像自带 ENTRYPOINT ["vllm", "serve"],必须清除,否则会干扰平台启动容器

执行构建和验证:

1
2
3
4
5
6
7
8
9
10
11
# 构建
docker build \
--build-arg BASE_IMAGE=42.228.13.241:666/jenkins/model_test_env/vllm:<你的镜像tag> \
-f vllm-scnet.Dockerfile \
-t vllm-scnet:0.28.1rc1 .

# 验证 Jupyter 就位(应输出版本号)
docker run --rm vllm-scnet:0.28.1rc1 /opt/conda/bin/jupyter --version

# 打包为 tar.gz
docker save vllm-scnet:0.28.1rc1 | gzip > vllm-scnet-0.28.1rc1.tar.gz

四、第三步:上传并在 SCNet 创建镜像

  1. 登录 SCNet 控制台 → 文件管理,将 vllm-scnet-0.28.1rc1.tar.gz 上传到个人主目录
  2. 进入 容器服务 → 镜像管理 → 我的镜像 → 创建镜像,填写:
    • 镜像名称:如 vllm-028(创建后不可修改)
    • 适配加速卡:异构加速卡(dtk 对应 DCU;创建后不可修改,注意别选错)
    • 使用区域:选择 DCU 所在区域
    • 镜像来源:选择镜像包,指定刚上传的 tar.gz 路径
    • SSH 服务:已安装
    • 开发工具:添加 Jupyter,软件路径填 /opt/conda/bin/jupyter
    • 环境标签(可选):框架 vLLM、Python py3.10
  3. 提交后在镜像详情 → 版本页签查看构建进度,等待完成
  4. 后续镜像更新时,在同一镜像条目里新增版本即可,无需重建条目

五、第四步:创建 Notebook 并启动

  1. 控制台 → 人工智能 → Notebook → 创建 Notebook
  2. 开发镜像选择”我的镜像”,选中刚创建的 vLLM 镜像;区域和加速卡类型与镜像配置保持一致
  3. 创建完成后通过 JupyterLab 或 SSH 进入容器,确认环境:
1
2
3
4
5
rocm-smi   # 查看 DCU:显存、温度、功耗
pip list | grep -E "vllm|torch"
# vllm 0.28.1+dtk2604...
# vllm-hcu 0.28.1rc1... ← 海光 HCU 平台插件
# torch 2.11.0+dtk2604...

⚠️ 提示:vLLM 首次 import 时 HCU 插件和 torch 初始化较慢(1~3 分钟),属正常现象,请耐心等待。

六、第五步:部署模型验证(以 Qwen3-0.6B 为例)

1. 准备模型

两个途径任选:

  • SCNet AI 社区:在 AI 社区的模型库查找所需模型并克隆
  • 自行下载:放到持久化目录 /root/private_data(个人数据,不受实例开关机影响),国内推荐用 ModelScope:
1
2
3
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
modelscope download --model Qwen/Qwen3-0.6B \
--local_dir /root/private_data/models/Qwen3-0.6B

注意:模型不要打进镜像(平台镜像上限 50GB),放持久化目录即可。

2. 启动 vLLM 服务

1
2
3
4
5
6
7
nohup vllm serve /root/private_data/models/Qwen3-0.6B \
--port 8000 \
--max-model-len 4096 \
--served-model-name Qwen3-0.6B \
> /root/vllm.log 2>&1 &

tail -f /root/vllm.log

等待日志出现 Application startup complete. 即服务就绪。启动过程中可以关注这些关键输出:

1
2
3
4
5
6
7
Platform plugin hcu is activated              ← HCU 插件激活
Resolved architecture: Qwen3ForCausalLM ← 模型架构识别
HcuGPUModelRunnerV2 ← 海光专用执行器
Loading weights took 4.32 seconds ← 权重加载(BF16,约 1.4 GiB)
torch.compile took 42.80 s in total ← 首次编译(缓存后下次启动更快)
Available KV cache memory: 55.99 GiB ← KV cache 分配
Maximum concurrency for 4,096 tokens: 127.97x ← 理论并发能力

从启动配置可见模型默认按 BF16 精度加载(dtype=torch.bfloat16, quantization=None),未做量化。

3. API 验证

1
2
3
4
5
6
7
8
9
10
11
# 查看模型列表
curl http://localhost:8000/v1/models

# 发送对话请求
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3-0.6B",
"messages": [{"role": "user", "content": "用一句话介绍海光DCU"}],
"max_tokens": 64
}'

返回正常的聊天补全结果,即部署成功。如需从平台外部访问服务,可在 Notebook 列表页使用”访问自定义服务”功能映射 8000 端口。

七、部署其他模型

本文用 0.6B 小模型演示完整流程。部署 Qwen3-32B、DeepSeek 等更大模型时(涉及张量并行、多卡、量化等配置),请参考海光官方推理实践仓库,按对应模型的配方调整启动参数:

https://github.com/HYGON-AI/inference-cookbook-das

镜像和迁移流程完全复用本文方法。常用参数备忘:

  • --tensor-parallel-size N:多卡张量并行
  • --gpu-memory-utilization 0.9:显存利用率
  • --served-model-name <名称>:自定义 API 中的模型名

八、流程总结

步骤 操作 关键点
1. 找镜像 DAS(https://pypi.sourcefind.cn/docker )检索并拉取 确认 tag 中的 dtk 版本
2. 改造镜像 Dockerfile 构建 Jupyter 链接到 /opt/conda/bin/jupyter、SSH/SUDO 按规则配置、清 ENTRYPOINT
3. 上传创建 文件管理传 tar → 镜像管理创建 适配加速卡选”异构加速卡”,开发工具配 Jupyter 路径
4. 启动 创建 Notebook 选”我的镜像” 区域与加速卡类型匹配
5. 验证 vllm serve + curl 模型放 /root/private_data,等 Application startup complete

按以上步骤操作,即可完成 DAS vLLM 镜像到超算互联网的迁移和海光 DCU 上的推理部署。