1.部署方式
大模型容器部署在910B2,dify、oneapi等部署在X86志强服务器上,实现前后端分离。
- 以下在X86上完成
2.docker 安装
3.镜像拉取以及模型拉取
3.1 镜像
docker pull swr.cn-south-1.myhuaweicloud.com/ascendhub/mis-tei:7.1.RC1-800I-A2-aarch64
3.2 模型
参阅:魔塔模型库
4.镜像导出
docker save -o mis-tei:7.1.RC1-800I-A2-aarch64.tar swr.cn-south-1.myhuaweicloud.com/ascendhub/mis-tei:7.1.RC1-800I-A2-aarch64
- 以下在晟腾arm64上完成
5.镜像导入及模型拷入
docker load -i mis-tei:7.1.RC1-800I-A2-aarch64.tar
6.启动脚本
vi mis-tei.sh
- 以下是经过我实测能够正常运行的
#!/bin/bash
# 适配 swr.cn-south-1.myhuaweicloud.com/ascendhub/mis-tei:6.0.RC3-800I-A2-aarch64 镜像
# 解决权限、NPU设备识别、服务启动顺序问题
# ==============================================
# 1. 变量配置(根据实际环境修改)
# ==============================================
model_dir="/apps/sharedstorage/mindie/models"
# 模型存放路径
image_id="f85b838e7160"
# 运行docker image list 看到的ID
embedding_model_id="BAAI/bge-m3"
reranker_model_id="BAAI/bge-reranker-v2-m3"
listen_ip="0.0.0.0"
embedding_listen_port=9000
reranker_listen_port=9080
npu_id=4
# 获取当前脚本所在目录的绝对路径(解决Docker挂载路径问题)
current_dir=$(cd $(dirname "${BASH_SOURCE[0]}"); pwd)
# ==============================================
# 2. 预处理(解决权限和目录问题)
# ==============================================
# 确保日志目录存在且权限可写
mkdir -p "$current_dir/logs"
chmod 777 "$current_dir/logs"
# 避免容器内写入权限不足
# 确保模型目录权限正确(容器内可访问)
chmod -R 755 "$model_dir"
# 解决父目录权限穿透问题
chmod o+x "$(dirname "$model_dir")" "$(dirname "$(dirname "$model_dir")")"
# ==============================================
# 3. 生成容器内启动脚本(/home/HwHiAiUser/run.sh)
# ==============================================
mkdir -p "$current_dir/.temp"
cat > "$current_dir/.temp/run.sh" << EOF
#!/bin/bash
# 容器内服务启动脚本
# 启动embedding服务
export ENABLE_BOOST=True
bash start.sh $embedding_model_id $listen_ip $embedding_listen_port > logs/embedding.log 2>&1 &
# 等待embedding服务初始化
sleep 30
# 启动reranker服务(添加专用环境变量)
export ENABLE_BOOST=True
export IS_RERANK=1
# 声明为rerank模型
export DEFAULT_PROMPT="<Query>: <s1>\\n<Document>: <s2>"
# 适配rerank提示词格式
export PROMETHEUS_PORT=9001
# 关键:为reranker指定独立的监控端口
bash start.sh $reranker_model_id $listen_ip $reranker_listen_port > logs/reranker.log 2>&1 &
# 保持容器运行
wait
EOF
# 给启动脚本添加执行权限
chmod +x "$current_dir/.temp/run.sh"
# ==============================================
# 4. 启动容器(完整参数)
# ==============================================
docker run -itd \
--name=mis-tei \
--net=host \
--privileged \
--user root \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci$npu_id \
$( [ -e /dev/davinci${npu_id}_rdma ] && echo "--device=/dev/davinci${npu_id}_rdma" ) \
-e ASCEND_VISIBLE_DEVICES=$npu_id \
-e HOME=/home/HwHiAiUser \
-e PATH=/usr/local/sbin:$PATH \
-v "$model_dir:/home/HwHiAiUser/model" \
-v "$current_dir/.temp/run.sh:/home/HwHiAiUser/run.sh" \
-v "$current_dir/logs:/home/HwHiAiUser/logs" \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
-v /usr/local/sbin:/usr/local/sbin:ro \
--entrypoint /home/HwHiAiUser/run.sh \
$image_id
# 清理临时文件
rm -rf "$current_dir/.temp"
echo "容器启动完成!"
echo "查看embedding日志:tail -f $current_dir/logs/embedding.log"
echo "查看reranker日志:tail -f $current_dir/logs/reranker.log"
7.查看日志
tail -f logs/reranker.log
tail -f logs/embedding.log
经过我的测试,预计会等待5分钟的样子,等待日志输出如下图即可