Atlas 300I duo mindie 部署qwen3-vl-30b-a3b笔记

第一步 mindie镜像下载安装

镜像地址:https://www.hiascend.com/developer/ascendhub/detail/af85b724a7e5469ebd7ea13c3439d48f
在这里插入图片描述docker pull --platform=arm64 swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:3.0.0b2-300I-Duo-py311-openeuler24.03-lts

第二步

docker run -it -d \
  --shm-size=64g \
  --name mindie_310 \
  --device=/dev/davinci0 \
  --device=/dev/davinci1 \
  --device=/dev/davinci2 \
  --device=/dev/davinci3 \
  --device=/dev/davinci4 \
  --device=/dev/davinci5 \
  --device=/dev/davinci_manager \
  --device=/dev/hisi_hdc \
  -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
  -v /usr/local/dcmi:/usr/local/dcmi:ro \
  -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro \
  -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware:ro \
  -v /usr/local/sbin:/usr/local/sbin:ro \
  -v /data/alg:/root/alg \
  -p 29511:29511 \
  -p 29512:29512 \
  -p 29513:29513 \
  -p 1025:1025 \
  -p 1026:1026 \
  -p 1027:1027 \
  -p 1121:1121 \
  swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:3.0.0-300I-Duo-py311-openeuler24.03-lts \
  bash

第三步

docker exec -it mindie_310 /bin/bash
cd /usr/local/Ascend/atb-models/requirements/models
pip install -r requirements_qwen3vl.txt

第四步

cd /usr/local/Ascend/mindie/latest
chmod 750 mindie-service
chmod -R 550 mindie-service/bin
chmod 550 mindie-service/lib
chmod 440 mindie-service/lib/*
chmod 550 mindie-service/lib/grpc
chmod 440 mindie-service/lib/grpc/*
chmod -R 550 mindie-service/include
chmod -R 550 mindie-service/scripts
chmod 750 mindie-service/logs
chmod 750 mindie-service/conf
chmod 640 mindie-service/conf/config.json
chmod 700 mindie-service/security
chmod -R 700 mindie-service/security/*

第五步

# 配置CANN环境,默认安装在/usr/local目录下
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 配置加速库环境
source /usr/local/Ascend/nnal/atb/set_env.sh
# 配置模型仓环境变量
source /usr/local/Ascend/atb-models/set_env.sh
# MindIE
source /usr/local/Ascend/mindie/latest/mindie-llm/set_env.sh
source /usr/local/Ascend/mindie/latest/mindie-service/set_env.sh
# 开启MindIE日志打印
export MINDIE_LOG_TO_STDOUT="true"

第六步

cd /usr/local/Ascend/mindie/latest/mindie-service
cd mindie-service/conf
vim config.json
修改"httpsEnabled" : false
修改"modelName" : "qwen2-7b",
    "modelWeightPath" : "/home/weight",

其余参数视情况修改
注意

"maxSeqLen" : 1280000,#2560倍数
"maxInputTokenLen" : 1024000,1024倍数
"maxPrefillTokens" : 1024000,需大于maxInputTokenLen

第七步 启动服务

nohup ./bin/mindieservice_daemon > output.log 2>&1 &
或
./bin/mindieservice_daemon
回显
Daemon start success!
表明启动成功

在这里插入图片描述在这里插入图片描述

测试

import time
import requests
import json

def test_generation_speed(prompt="输出工地安全准则", max_tokens=1204000, runs=3):
    url = "http://127.0.0.1:1025/v1/chat/completions"
    total_tokens = 0
    total_time = 0

    for i in range(runs):
        print(f"\n--- Run {i+1} ---")
        start_time = time.time()
        generated_tokens = 0
        
        response = requests.post(
            url,
            headers={"Content-Type": "application/json"},
            json={
                "model": "qwen3-vl-qwen3-vl-a3b",
                "messages": [{"role": "user", "content": prompt}],
                "max_tokens": max_tokens,      # 增加生成长度
                "temperature": 0.7,
                "stream": True
            },
            timeout=3600,                       # 增加超时时间
            stream=True
        )
        
        if response.status_code == 200:
            print("生成内容: ", end="", flush=True)
            for line in response.iter_lines():
                if line:
                    line = line.decode('utf-8')
                    if line.startswith('data: '):
                        if line.strip() == 'data: [DONE]':
                            break
                        try:
                            chunk = json.loads(line[6:])
                            content = chunk['choices'][0]['delta'].get('content', '')
                            if content:
                                print(content, end="", flush=True)
                                generated_tokens += len(content.split())
                        except:
                            pass
            print()  # 换行
        else:
            print(f"Run {i + 1}: Error {response.status_code} - {response.text}")
            continue
        
        duration = time.time() - start_time
        speed = generated_tokens / duration if duration > 0 else 0
        print(f"Run {i+1}: ~{generated_tokens} tokens in {duration:.2f}s → {speed:.2f} tokens/s")
        
        total_tokens += generated_tokens
        total_time += duration

    if total_time > 0:
        print(f"\nAverage: {total_tokens / total_time:.2f} tokens/s over {runs} runs")

if __name__ == "__main__":
    test_generation_speed()

输出
在这里插入图片描述

其他:容器简单推理测化命令

torchrun --standalone --nnodes=1 --nproc_per_node=1 \
  examples/run_pa.py \
  --model_path /root/alg/qwen3-vl-8b \
  --input_texts "什么是深度学习?" "深度学习和机器学习有什么区别?" "请举例说明深度学习的应用场景。" \
  --max_output_length 512 \
  --max_batch_size 3 \
  --trust_remote_code

参考连接

https://www.hiascend.com/document/detail/zh/mindie/300/envdeployment/instg/docs/zh/user_guide/install/source/image_usage_guide.md
https://gitcode.com/Ascend/MindIE-LLM/blob/v3.0.0/docs/zh/user_guide/quick_start/quick_start.md

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐