找回密码
 立即注册
首页 业界区 业界 Qwen3-Embedding国产化部署

Qwen3-Embedding国产化部署

嫁吱裨 昨天 17:45
1. 背景


  • 最近一直在做ToG的项目,其中用到了语义检索,研发环境使用A40和vllm,即可轻松部署Qwen3-Embedding-8B,但客户环境要求国产化环境,因此探索Qwen3-Embedding-8B如何在国产化环境部署。
  • 实不相瞒,本来以为仅需半天搞定的事情,我居然耗费了3天半的时间(汗颜....),究其原因,主要是包含如下几个方面:

    • 研发环境没有国产化系统及显卡,也没有相关的部署经验,
    • 网上针对特定的300I Duo部署Qwen3-Embedding-8B的教程几乎没找到,多的是910系列。但客户只有Altas 300I Duo的环境。
    • 最初两天一直在探索vllm-ascend进行部署,结果现阶段版本仍不支持。
    • 最后一天转向MIS-TEI,才终于看到曙光。

  • 下面教程就是部署成功的完整流程,各位看官如有同样环境,无脑借鉴即可,省心省力。
2. 系统环境


  • 操作系统: 麒麟Kylin V10 (Sword)
  • 显卡型号: 8卡Altlas 300I Duo
  • 驱动版本: Ascend-hdk-310p-npu-driver_25.5.1_linux-aarch64.run
  • 固件版本: Ascend-hdk-310p-npu-firmware_7.8.0.6.201.run
  • CANN版本: Ascend-cann_8.5.0_linux-aarch64.run
  • 优化算子版本: Ascend-cann-310p-ops_8.5.0_linux-aarch64.run
3. 驱动安装
  1. # 1. 创建用户及用户组
  2. sudo groupadd HwHiAiUser
  3. sudo useradd -g HwHiAiUser -d /home/HwHiAiUser -m -s /bin/bash HwHiAiUser
  4. # 2. 安装驱动(等待几分钟)
  5. sudo ./Ascend-hdk-310p-npu-driver_25.5.1_linux-aarch64.run --full --install-for-all --force
  6. reboot # 重启
  7. npu-smi info # 驱动验证
  8. # 3. 安装固件
  9. sudo ./Ascend-hdk-310p-npu-firmware_7.8.0.6.201.run --full
  10. reboot
  11. # 4. CANN驱动安装
  12. sudo ./Ascend-cann_8.5.0_linux-aarch64.run --install
  13. # 5. 安装优化算子驱动
  14. sudo ./Ascend-cann-310p-ops_8.5.0_linux-aarch64.run --install
  15. # 6. 设置驱动环境变量
  16. source /usr/local/Ascend/ascend-toolkit/set_env.sh
  17. echo 'source /usr/local/Ascend/ascend-toolkit/set_env.sh' >> ~/.bashrc
  18. # 7. 验证驱动是否成功
  19. npu-smi info
  20. python3 -c "import acl; print('ACL Load OK')"
复制代码
4. Docker部署及TEI镜像拉取
  1. # 联网环境进行拉取
  2. docker pull swr.cn-south-1.myhuaweicloud.com/ascendhub/mis-tei:7.3.0-300I-Duo-aarch64
  3. # 镜像打包及传输
  4. docker save swr.cn-south-1.myhuaweicloud.com/ascendhub/mis-tei:7.3.0-300I-Duo-aarch64 -o mis-tei.tar
  5. # 客户环境加载
  6. docker load -i mis-tei.tar
  7. # 模型下载Qwen3-Embedding-8B,直接通过ModelScope进行下载,此处省略其过程
复制代码
5. 容器启动


  • 这块耗费的时间比较长,因为存在各种报错,最终才形成稳定版本
  1. # 1. 编写/data/models/start_tei.sh的脚本
  2. #!/bin/bash
  3. source /usr/local/Ascend/ascend-toolkit/set_env.sh
  4. export LD_PRELOAD=/usr/local/lib/python3.11/site-packages/scikit_learn.libs/libgomp-d22c30c5.so.1.0.0:/usr/lib/aarch64-linux-gnu/libgomp.so.1
  5. export PYTHONPATH=/usr/local/Ascend/mxRag-7.3.0/ops/transformer_adapter:$PYTHONPATH
  6. export RAG_SDK_HOME=/usr/local/Ascend/mxRag-7.3.0
  7. export LD_LIBRARY_PATH=/usr/local/Ascend/nnal/atb/8.5.0/atb/cxx_abi_0/lib:/usr/local/Ascend/mxRag-7.3.0/ops/lib:$LD_LIBRARY_PATH
  8. PORT=${PORT:-8080}
  9. UDS_PATH=${UDS_PATH:-/tmp/text-embeddings-inference-server}
  10. DEVICE_ID=${ASCEND_VISIBLE_DEVICES:-0}
  11. export ASCEND_VISIBLE_DEVICES=$DEVICE_ID
  12. export NPU_VISIBLE_DEVICES=$DEVICE_ID
  13. export RANK=0
  14. export LOCAL_RANK=0
  15. exec /home/HwHiAiUser/.cargo/bin/text-embeddings-router \
  16.   --model-id /home/HwHiAiUser/model/ \
  17.   --hostname 0.0.0.0 \
  18.   --port $PORT \
  19.   --uds-path $UDS_PATH \
  20.   --auto-truncate \
  21.   --dtype float16 \
  22.   --max-batch-tokens 16384
  23.   
  24. # 2. 编写启动容器的脚本:此处8张卡上默认都启动了两个进程,总计16个进程(显卡资源需监测利用率)
  25. for i in $(seq 0 15); do
  26.   docker stop tei-$i 2>/dev/null
  27.   docker rm tei-$i 2>/dev/null
  28. done
  29. for i in $(seq 0 15); do
  30.   DEVICE=$((i % 8))
  31.   PORT=$((8080 + i))
  32.   UDS="/tmp/tei-server-$i"
  33.   docker run -u root -d \
  34.     -e ENABLE_BOOST=True \
  35.     -e TEI_NPU_DEVICE=$DEVICE \
  36.     -e PORT=$PORT \
  37.     -e UDS_PATH=$UDS \
  38.     --name=tei-$i \
  39.     --net=host \
  40.     --privileged \
  41.     --device=/dev/davinci_manager \
  42.     --device=/dev/hisi_hdc \
  43.     --device=/dev/devmm_svm \
  44.     --device=/dev/davinci$DEVICE \
  45.     -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
  46.     -v /usr/local/sbin:/usr/local/sbin:ro \
  47.     -v /data/models/Qwen3-Embedding-8B:/home/HwHiAiUser/model \
  48.     -v /data/models/start_tei.sh:/start_tei.sh \
  49.     -v /etc/hostname:/etc/hostname:ro \
  50.     -v /etc/hosts:/etc/hosts:ro \
  51.     --entrypoint /bin/bash \
  52.     swr.cn-south-1.myhuaweicloud.com/ascendhub/mis-tei:7.3.0-300I-Duo-aarch64 \
  53.     /start_tei.sh
  54.   echo "Started tei-$i on Device=$DEVICE PORT=$PORT"
  55.   sleep 5
  56. done
复制代码
6. nginx负载均衡转发

[code]# 1. 镜像拉取docker pull docker.1ms.run/nginx:latest# 2. nginx配置文件mkdir -p /data/nginx/logscat > /data/nginx/tei.conf

相关推荐

您需要登录后才可以回帖 登录 | 立即注册