RC机器自制镜像跑mindie qwen3-1.7B服务化
收藏回复举报
RC机器自制镜像跑mindie qwen3-1.7B服务化
新人帖
发表于2025-09-15 17:31:24
0 查看
  1. 使用下面的命令起一个ubuntu22.04基础镜像 【ubuntu22.tar见文末附件】
docker run -it --net=host --shm-size=1000g \
--name=mindie_test \
--privileged=true \
--device=/dev/upgrade:/dev/upgrade \
--device=/dev/davinci0:/dev/davinci0 \
--device=/dev/davinci_manager \
-v /etc/sys_version.conf:/etc/sys_version.conf \
-v /etc/ld.so.conf.d/mind_so.conf:/etc/ld.so.conf.d/mind_so.conf \
-v /etc/hdcBasic.cfg:/etc/hdcBasic.cfg \
-v /var/dmp_daemon:/var/dmp_daemon \
-v /usr/lib64/libsemanage.so.2:/usr/lib64/libsemanage.so.2 \
-v /usr/lib64/libmmpa.so:/usr/lib64/libmmpa.so \
-v /usr/lib64/libcrypto.so.1.1:/usr/lib64/libcrypto.so.1.1 \
-v /usr/lib64/libyaml-0.so.2.0.9:/usr/lib64/libyaml-0.so.2 \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/lib64/libstackcore.so:/usr/lib64/libstackcore.so \
-v /etc/slog.conf:/etc/slog.conf \
-v /var/slogd:/var/slogd \
-v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64 \
-v /home/xiaojiangwu:/home/xiaojiangwu \
a6be1f66f70f /bin/bash;

cp /etc/apt/sources.list /etc/apt/sources.list.bak # 在做如下换yum源之前先备份源

sh -c 'echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security multiverse" > /etc/apt/sources.list'

apt update apt install -y vim curlvim /etc/apt/sources.list :%s/http:/https:/g # 将全局的http:改为https: 而不加%表示只替换当前行



  1. 下面的命令是使能driver驱动,可以写进一个run.sh里面
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/Ascend/driver/lib64:/usr/lib64
ldconfig
ln -sf /lib /lib64
mkdir /var/dmp
nohup /var/dmp_daemon -I -M -U 8087 >&/dev/null &
ps -ef | grep dmp
mkdir /usr/slog
/var/slogd -d
npu-smi info

source /run.sh

或若报了Dsmi_cmd_get_memory_info call error,如下图: true 则在容器中新建HwHiAiUser用户:

useradd -d /home/HwHiAiUser -m HwHiAiUser
chown HwHiAiUser:HwHiAiUser /var/slogd

【slogd见文末附件】



  1. 编译安装python3.11

apt-get install -y --no-install-recommends ca-certificates netbase tzdata wget libjemalloc2 # Runtime Dependencies

apt-get install -y --no-install-recommends dpkg-dev gcc g++ gnupg libbluetooth-dev libbz2-dev libc6-dev libdb-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev make tk-dev uuid-dev xz-utils zlib1g-dev # Install Python Build Dependencies

wget https://www.python.org/ftp/python/3.11.6/Python-3.11.6.tgz --no-check-certificate

gzip -d Python-3.11.6.tgz && tar -xvf Python-3.11.6.tar

cd Python-3.11.6 && ./configure --prefix=/usr/local/python3.11.6 --enable-loadable-sqlite-extensions --enable-shared

make && make install

vim /run.sh # 追加如下

export LD_LIBRARY_PATH=/usr/local/python3.11.6/lib/:$LD_LIBRARY_PATH
export PATH=/usr/local/python3.11.6/bin/:$PATH

source /run.sh

注:完全卸载python

rm -rf /usr/local/python3.11.6/
rm -f /usr/local/bin/python3
rm -f /usr/local/bin/python

删除run.sh的两个export


  1. 安装mindie

python3.11 -m pip install --upgrade pip

pip3 install -r requirements-2.1.0.txt --no-cache-dir # 【requirements-2.1.0.txt见文末附件】

pip3 cache purge # 清除 pip3 的本地缓存


安装8.2.RC1的cann(toolkit 、kernel、nnal)社区版资源下载-资源下载中心-昇腾社区(请注意下面nnal的安装!)

vim /run.sh # 安装完CANN后追加如下

source /usr/local/Ascend/ascend-toolkit/set_env.sh

source /usr/local/Ascend/nnal/atb/set_env.sh



MindIE-昇腾社区 ---> MindIE模型支持列表-昇腾社区 显示最新的mindie==2.1.RC1镜像可以跑通qwen3,则从昇腾社区下载mindie镜像,并把镜像中的/usr/local/Ascend/atb-models目录拷贝到容器中,再安装官网的mindie abi0包,此处略。。。

执行如下命令安装mindie:

chmod +x ./Ascend-mindie_2.1.RC1_linux-aarch64_abi0.run
./Ascend-mindie_2.1.RC1_linux-aarch64_abi0.run --install

执行如下命令安装nnal:

root@davinci-mini:/home/xiaojiangwu/uploaded_files/cann# which python
root@davinci-mini:/home/xiaojiangwu/uploaded_files/cann# which python3
/usr/local/python3.11.6/bin//python3
root@davinci-mini:/home/xiaojiangwu/uploaded_files/cann# ln -sf /usr/local/python3.11.6/bin//python3 /usr/local/python3.11.6/bin//python
root@davinci-mini:/home/xiaojiangwu/uploaded_files/cann# ./Ascend-cann-nnal_8.2.RC1_linux-aarch64.run --install --torch_atb

vim /run.sh # 追加如下

source /usr/local/Ascend/mindie/set_env.sh
source /usr/local/Ascend/atb-models/set_env.sh
source /usr/local/Ascend/mindie/latest/mindie-service/set_env.sh
source /usr/local/Ascend/mindie/latest/mindie-llm/set_env.sh

source /run.sh

准备跑mindie:
vim /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json

httpsEnabled: false
npuDeviceIds: [[0]]
modelName: "qwen-32B"
modelWeightPath: "/data/Qwen/Qwen3-32B"
worldSize: 1
interCommTLSEnabled: false
interNodeTLSEnabled: false

export ASCEND_RT_VISIBLE_DEVICES="0"

cd /usr/local/Ascend/mindie/latest/mindie-service

./bin/mindieservice_daemon


注:
若报了Killed,则执行如下开启报错日志:

pkill -9 mind
pkill -9 python
export MINDIE_LOG_TO_STDOUT=1
export MINDIEMS_LOG_LEVEL="info"
export ASDOPS_LOG_LEVEL=ERROR
export ASDOPS_LOG_TO_STDOUT=1


若报了Failed to get vocab size from tokenizer wrapper with exception: ...,如下图: true 发现 torch_npu 需要下https://pytorch-package.obs.cn-north-4.myhuaweicloud.com/pta/Daily/v2.1.0-7.1.0/20250722.5/pytorch_v2.1.0-7.1.0_py311.tar.gz



若执行source atb-models报了AttributeError: module 'torch' has no attribute 'unit64',图略。则 pip install safetensors==0.4.5 -i https://pypi.tuna.tsinghua.edu.cn/simple


若报了FAILED: data did not match any variant of untagged enum ModelWrapper at line 757479 column 3,图略。则升transformers pip install transformers==4.49.0 --force-reinstall -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install numpy==1.26.4 --force-reinstall -i https://pypi.tuna.tsinghua.edu.cn/simple


vim /usr/local/python3.11.6/lib/python3.11/site-packages/mindie_llm/text_generator/generator.py中的 npu_mem 要根据mindie的参数 npuMemSize 的公式计算而得,详见mindie配置参数解释,则有43*.8 -3.8*2-1.3 ~= 25.499999999999996(其中还没减去运行时相关变量占用的内存);此处置为20G,就可以跑通!


新开一个窗口访问mindie服务:

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{
    "inputs": "My name is Olivier and I",
    "stream": false,
    "parameters": {
        "temperature": 0.5,
        "top_k": 10,
        "top_p": 0.95,
        "max_new_tokens": 20,
        "do_sample": true,
        "seed": null,
        "repetition_penalty": 1.03,
        "details": true,
        "typical_p": 0.5,
        "watermark": false,
        "priority": 5,
        "timeout": 50
    }
}' http://127.0.0.1:1025/infer


  1. ais_bench性能测试

安装ais_bench工具,参考tools: Ascend tools - Gitee.com

pip3 install aclruntime-0.0.2-cp39-cp39-linux_aarch64.whl pip3 install ais_bench-0.0.2-py3-none-any.whl

ais_bench --models vllm_api_stream_chat --search # 查看ais_bench配置文件代码路径 true

vim /usr/local/lib/python3.11/site-packages/ais_bench/benchmark/configs/models/vllm_api/vllm_api_stream_chat.py # 合成数据集

from ais_bench.benchmark.models import VLLMCustomAPIChatStream
from ais_bench.benchmark.utils.model_postprocessors import extract_non_reasoning_content

models = [
    dict(
        attr="service",
        type=VLLMCustomAPIChatStream,
        abbr='vllm-api-stream-chat',
        path="/data/qwen7vl-w8a8", #1
        model="qwen", #2
        request_rate = 0,
        retry = 2,
        host_ip = "127.0.0.1", #3
        host_port = 1025, #4
        max_out_len = 512,
        batch_size=1,
        trust_remote_code=False,
        generation_kwargs = dict(
            temperature = 0.5,
            top_k = 10,
            top_p = 0.95,
            seed = None,
            repetition_penalty = 1.03,
        ),
        pred_postprocessor=dict(type=extract_non_reasoning_content)
    )
]

vim /usr/local/lib/python3.11/site-packages/ais_bench/datasets/synthetic/synthetic_config.py

synthetic_config = {
    "Type":"tokenid",   # [tokenid/string],生成的随机数据集类型,支持固定长度的随机tokenid,和随机长度的string,两种类型的数据集
    "RequestCount": 10, # 生成的请求条数,应与模型侧配置文件中的 decode_batch_size 一致
    "TrustRemoteCode": False, #是否信任远端代码,tokenid模式下需要加载tokenizer生成tokenid,默认为Fasle
    "StringConfig" : {  # string类型的随机数据集的配置相关项,请参考以上注释处:"StringConfig中的随机生成方法参数说明"
        "Input" : {     # 每条请求的输入长度
            "Method": "uniform",
            "Params": {"MinValue": 200, "MaxValue": 200}
        },
        "Output" : {    # 每条请求的输出长度
            "Method": "uniform",
            "Params": {"MinValue": 200, "MaxValue": 200}
        }
    },
    "TokenIdConfig" : { # tokenid类型的随机数据集的配置相关项
        "RequestSize": 10 # 每条请求的长度,即每条请求中token id的个数,应与模型侧配置文件中的 input_seq_len 一致
    }
}

ais_bench --models vllm_api_stream_chat --datasets synthetic_gen synthetic_gen -m perf

true

true


附件链接:
一些小依赖文件:libtf_kernels.so等4个文件 链接: https://pan.baidu.com/s/1sUovokV9NVN7nCpJY6JKhw 提取码: hvkh --来自百度网盘超级会员v6的分享

mindie镜像包:mindie_rc_0.0.0.tar 链接: https://pan.baidu.com/s/11TAopMNVxXiTiEbURU9hMg 提取码: pw7e --来自百度网盘超级会员v6的分享

本帖最后由 匿名用户2025/12/04 16:11:46 编辑

我要发帖子