日期:2025 年 9 月 21 日

主题:vLLM Ascend 迁移实操(大模型推理适配)

📢 前期准备:工作坊信息与基础资源

  1. 加入要求:需先点击链接申请加入 NPU 算力组织,已获算力者可提前在魔乐社区构建空间
  1. 实操文档:参考CSDN 博客
  1. 场地网络:冠生园五楼无线,账号GSY-HYZX,密码bjgs145802
  1. 关联社区:可加入 “北京朝阳 AI 社区” 获取更多资源

一、环境配置:从空间创建到依赖安装

1. 体验空间创建(核心步骤)

  • 镜像选择:必须选vllm:openeuler-python3.9-cann8.2.RC1-openmind1.0.0,确保勾选 NPU 算力资源。
  • 接入与许可:接入 SDK 选Application,许可证随意(示例用apache-2.0)。
  • 进入方式:容器启动后,打开空间应用,输入界面提示的令牌进入 jupyter lab,
  • (默认令牌为:openMind,若想修改令牌,请手动在设置中添加机密变量 JUPYTER_TOKEN )后续操作(除文件传输)均在 “新建终端” 中完成。点击后界面:

2. 依赖包安装(仅补装缺失部分)

基础镜像已含vllm和vllm-ascend,只需安装llama factory,步骤如下:

pip list

# 配置pip源
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
 
# 源码安装llama factory
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .
# 如果无法访问GitHub,可以通过如下镜像链接获取源码
# git clone http://git.lcx.ac.cn:3000/frozenleaves/LLaMA-Factory

3. 环境校验(确保所有依赖可用)

  • 第一步:加载 CANN 包(新终端启动必须执行):
source ~/Ascend/ascend-toolkit/set_env.sh
source ~/Ascend/nnal/asdsip/set_env.sh
source ~/Ascend/nnal/atb/set_env.sh

 

  • 第二步:校验核心包:启动 python 交互终端,输入以下命令,
    import torch
    
    import torch_npu
    
    import vllm
    
    import vllm_ascend
    
    torch.npu.is_available() # 预期输出True
    无报错且torch.npu.is_available()返回True即正常:
Python 3.9.9 (main, Sep 10 2025, 15:09:00) 
[GCC 10.3.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
/home/openmind/.local/lib/python3.9/site-packages/torch_npu/__init__.py:298: UserWarning: On the interactive interface, the value of TASK_QUEUE_ENABLE is set to 0 by default.                      Do not set it to 1 to prevent some unknown errors
  warnings.warn("On the interactive interface, the value of TASK_QUEUE_ENABLE is set to 0 by default. \
>>> import torch_npu
>>> import vllm
INFO 09-16 19:29:33 [importing.py:17] Triton not installed or not compatible; certain GPU-related functions will not be available.
WARNING 09-16 19:29:33 [importing.py:29] Triton is not installed. Using dummy decorators. Install it via `pip install triton` to enable kernel compilation.
INFO 09-16 19:29:36 [__init__.py:39] Available plugins for group vllm.platform_plugins:
INFO 09-16 19:29:36 [__init__.py:41] - ascend -> vllm_ascend:register
INFO 09-16 19:29:36 [__init__.py:44] All plugins in this group will be loaded. Set `VLLM_PLUGINS` to control which plugins to load.
INFO 09-16 19:29:36 [__init__.py:235] Platform plugin ascend is activated
WARNING 09-16 19:29:39 [_custom_ops.py:22] Failed to import from vllm._C with ModuleNotFoundError("No module named 'vllm._C'")
>>> import vllm_ascend
>>>  torch.npu.is_available()
  File "<stdin>", line 1
    torch.npu.is_available()
IndentationError: unexpected indent
>>> torch.npu.is_available()
True
>>> 

  • 第三步:校验 llama factory:在 LLaMA-Factory 目录下执行llamafactory-cli env,
    [openmind@modeler-space-80267606-2a81fde3 LLaMA-Factory]$ llamafactory-cli env
    INFO 09-16 19:31:25 [importing.py:17] Triton not installed or not compatible; certain GPU-related functions will not be available.
    WARNING 09-16 19:31:25 [importing.py:29] Triton is not installed. Using dummy decorators. Install it via `pip install triton` to enable kernel compilation.
    INFO 09-16 19:31:25 [__init__.py:39] Available plugins for group vllm.platform_plugins:
    INFO 09-16 19:31:25 [__init__.py:41] - ascend -> vllm_ascend:register
    INFO 09-16 19:31:25 [__init__.py:44] All plugins in this group will be loaded. Set `VLLM_PLUGINS` to control which plugins to load.
    INFO 09-16 19:31:25 [__init__.py:235] Platform plugin ascend is activated
    WARNING 09-16 19:31:30 [_custom_ops.py:22] Failed to import from vllm._C with ModuleNotFoundError("No module named 'vllm._C'")
     
    - `llamafactory` version: 0.9.4.dev0
    - Platform: Linux-4.19.90-2102.2.0.0068.3.ctl2.aarch64-aarch64-with-glibc2.34
    - Python version: 3.9.9
    - PyTorch version: 2.5.1 (NPU)
    - Transformers version: 4.52.4
    - Datasets version: 2.21.0
    - Accelerate version: 1.10.1
    - PEFT version: 0.17.1
    - TRL version: 0.9.6
    - NPU type: Ascend910B2
    - CANN version: 8.2.RC1
    - vLLM version: 0.9.2.dev1+g050ef1521
    - Git commit: 2b27283ba0566eda9ec7ac335642807189c87e70
    - Default data directory: detected
    可查看版本(示例 0.9.4.dev0)、NPU 类型(Ascend910B2)等信息。

二、模型推理部署:三种推理方式实操

1. 权重下载(关键:处理 LFS 大文件)

  • 先克隆模型仓库(示例为 Qwen2.5-VL 和 InternVL3_5):
    git clone https://modelers.cn/PyTorch-NPU/Qwen2.5-VL-3B-Instruct.git
    
    git clone https://modelers.cn/Intern/InternVL3_5-1B.git

  • 进入每个仓库根目录,执行以下命令拉取大文件(否则权重不完整):
    git lfs install
    
    git lfs pull
  • 更多的模型可以在魔乐社区模型库下载

2. 交互式终端推理(需配置 yaml 文件)

  • 第一步:创建inference.yaml配置文件,内容如下:
# inference.yaml
model_name_or_path: /home/openmind/Qwen2.5-VL-3B-Instruct/
template: qwen2_vl
infer_backend: vllm  # choices: [huggingface, vllm]
trust_remote_code: true
infer_dtype: bfloat16
 
vllm_gpu_util: 0.9
vllm_enforce_eager: true
vllm_maxlen: 2048

 

  • 第二步:启动交互终端:
llamafactory-cli chat inference.yaml

3. 在线推理(两种后端可选)

  • vllm 后端(推荐,速度更快):
    API_PORT=8000 llamafactory-cli api inference.yaml infer_backend=vllm vllm_enforce_eager=true
  • huggingface 后端
    API_PORT=8000 llamafactory-cli api inference.yaml infer_backend=huggingface
  • 注意:InternVL3_5 系列模型用 llama factory 部署有 bug,建议直接用 vllm 启动服务:
vllm serve /home/openmind/Qwen2.5-VL-3B-Instruct/ --port 8000 --max-model-len 16384 --dtype bfloat16
  • 测试在线推理:用 curl 发 post 请求(示例问图片内容):
    
    curl http://localhost:8000/v1/chat/completions \
    
    -H "Content-Type: application/json" \
    
    -d '{
    
    "model": "/home/openmind/Qwen2.5-VL-3B-Instruct/",
    
    "messages": [
    
    {"role": "system", "content": "You are a helpful assistant."},
    
    {"role": "user", "content": [
    
    {"type": "image_url", "image_url": {"url": "https://modelscope.oss-cn-beijing.aliyuncs.com/resource/qwen.png"}},
    
    {"type": "text", "text": "What is the text in the illustrate?"}
    
    ]}
    
    ]
    
    }'

4. 离线推理(用 vllm 库写脚本)

  • 创建infer.py脚本,核心注意模型占位符差异(Qwen2.5-VL 用<|image_pad|>,InternVL3_5 用<image>):
    from vllm import LLM
    
    import PIL
    
    # 1. 初始化模型(路径按实际调整)
    
    llm = LLM(model="/home/openmind/Qwen2.5-VL-3B-Instruct/", dtype='bfloat16', gpu_memory_utilization=0.7, enforce_eager=True, max_model_len=15565)
    
    # 2. 准备prompt和图片(注意占位符)
    
    prompt = "user:\n<|image_pad|>这张图片是什么" # Qwen2.5-VL专用
    
    image = PIL.Image.open("/home/openmind/LLaMA-Factory/data/mllm_demo_data/1.jpg") # 图片路径
    
    # 3. 执行推理并输出
    
    outputs = llm.generate({
    
    "prompt": prompt,
    
    "multi_modal_data": {"image": image},
    
    })
    
    for o in outputs:
    
    print(o.outputs[0].text)
  • 更多样例:参考vllm 官方文档

三、模型上传:分享至魔乐社区

1. 创建模型仓库

  • 进入魔乐社区个人中心,点击 “创建模型”,按提示填写基本信息(如名称、描述),完成后生成空仓库。

2. 上传权重文件(Git 工具)

  • 第一步:创建访问令牌:在个人中心生成 “write” 权限的令牌,保存好(后续 push 需用)。
  • 第二步:克隆仓库并上传文件:
    
    # 1. 克隆自己的空仓库(替换为实际仓库链接)
    
    git clone https://modelers.cn/frozenleaves/Qwen2.5-VL-3B-Instruct.git
    
    # 2. 进入目录,复制权重文件到该目录
    
    cd Qwen2.5-VL-3B-Instruct/
    
    # cp 本地权重路径/* ./ (复制权重)
    
    # 3. 配置LFS追踪大文件(避免上传失败)
    
    git lfs track "*.7z" "*.bin" "*.bz2" "*.ckpt" "*.h5" "*.lfs.*" "*.mlmodel" "*.model" "*.npy" "*.npz" "*.onnx" "*.pb" "*.pickle" "*.pkl" "*.pt" "*.pth" "*.rar" "*.safetensors" "saved_model/**/*" "*.tar.*" "*.tar" "*.tgz" "*.zip" "*tfevents*" "*.gz"
    
    # 4. 提交并推送(密码处输入之前创建的令牌)
    
    git add .
    
    git commit -m "init commit" # 提交备注
    
    git push

  • 后续更新:重复git add .、git commit、git push即可。

结语

历时数日的魔乐 GeekDay 模型推理适配工作坊圆满落幕,在这场聚焦 vLLM Ascend 迁移实操的技术盛宴中,我们团队凭借扎实的技术积累与高效的协作配合,成功斩获团队赛第三名的佳绩。这份荣誉不仅是对我们技术能力的肯定,更是对整个实操过程中每一步探索与突破的最佳见证。

回顾本次工作坊,从前期申请 NPU 算力组织、熟悉魔乐社区构建空间,到一步步完成环境配置 —— 精准选择镜像、补装依赖包、细致校验环境,再到深入开展模型推理部署,尝试交互式终端推理、在线推理、离线推理三种方式,最后顺利将模型上传至魔乐社区实现成果分享,每一个环节都凝聚着团队成员的汗水与智慧。我们曾为解决 Git LFS 大文件拉取问题反复尝试,也曾为调试推理脚本中的模型占位符差异深入研究,正是这些不断克服困难的过程,让我们对 vLLM Ascend 迁移实操有了更深刻的理解与掌握。

此次工作坊的经历,不仅让我们提升了大模型推理适配的技术水平,更让我们感受到了团队协作的强大力量。同时,也要感谢魔乐社区提供的优质资源与平台,以及 “北京朝阳 AI 社区” 带来的额外支持,为我们的学习与实践创造了良好条件。

未来,我们将带着本次工作坊的收获与荣誉,继续在大模型技术领域深耕细作,不断探索更多技术可能性,将所学知识应用到实际项目中,为人工智能技术的发展贡献自己的一份力量。也期待在未来的技术交流活动中,能与更多同行相互学习、共同进步!

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐