Skip to content

Latest commit

 

History

History
234 lines (187 loc) · 6.72 KB

File metadata and controls

234 lines (187 loc) · 6.72 KB

使用 xLLM 在 Ascend A3 设备 推理 GLM-4.6V 模型

1.拉取镜像环境

首先下载我们提供的镜像:

# A2 x86
docker pull quay.io/jd_xllm/xllm-ai:xllm-dev-hb-rc2-x86
# A2 arm
docker pull quay.io/jd_xllm/xllm-ai:xllm-dev-hb-rc2-arm
# A3 arm
docker pull quay.io/jd_xllm/xllm-ai:xllm-dev-hc-rc2-arm

注意: A2 机器性能未进行压测。

然后创建对应的容器

sudo docker run -it --ipc=host -u 0 --privileged --name mydocker --network=host \
 -v /var/queue_schedule:/var/queue_schedule \
 -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
 -v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
 -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
 -v /var/log/npu/conf/slog/slog.conf:/var/log/npu/conf/slog/slog.conf \
 -v /var/log/npu/slog/:/var/log/npu/slog \
 -v ~/.ssh:/root/.ssh  \
 -v /var/log/npu/profiling/:/var/log/npu/profiling \
 -v /var/log/npu/dump/:/var/log/npu/dump \
 -v /runtime/:/runtime/ -v /etc/hccn.conf:/etc/hccn.conf \
 -v /export/home:/export/home \
 -v /home/:/home/  \
 -w /export/home \
 quay.io/jd_xllm/xllm-ai:xllm-0.7.1-dev-hb-rc2-x86

2.拉取源码并编译

下载官方仓库与模块依赖:

git clone https://github.com/jd-opensource/xllm
cd xllm
git checkout glm4.6v-preview
git submodule init
git submodule update

编译依赖vcpkg,镜像中已经提前配置完成,可以执行命令 "env | grep VCPKG" 检查。

(可选)如果您想要手动配置,可以执行如下命令:

git clone https://gitcode.com/xLLM-AI/vcpkg.git
cd vcpkg && git checkout ffc42e97c866ce9692f5c441394832b86548422c
export VCPKG_ROOT=/your/path/to/vcpkg

下载安装依赖:

pip install --upgrade setuptools wheel pre-commit
yum install numactl

执行编译,在build/下生成可执行文件build/xllm/core/server/xllm

python setup.py build

3.启动模型 - GLM-4.6 BF16版本

若机器为重启后初次拉起服务,需先执行以下脚本对device进行初始化

#若不执行且npu未初始化可能导致xllm进程拉起失败

python -c "import torch_npu
for i in range(16):torch_npu.npu.set_device(i)"

环境变量

##### 1, 配置依赖路径相关环境变量
export PYTHON_INCLUDE_PATH="$(python3 -c 'from sysconfig import get_paths; print(get_paths()["include"])')"
export PYTHON_LIB_PATH="$(python3 -c 'from sysconfig import get_paths; print(get_paths()["include"])')"
export PYTORCH_NPU_INSTALL_PATH=/usr/local/libtorch_npu/
export PYTORCH_INSTALL_PATH="$(python3 -c 'import torch, os; print(os.path.dirname(os.path.abspath(torch.__file__)))')"
export LIBTORCH_ROOT="$(python3 -c 'import torch, os; print(os.path.dirname(os.path.abspath(torch.__file__)))')"

export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/opp/vendors/xllm/op_api/lib/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/libtorch_npu/lib:$LD_LIBRARY_PATH
export LD_PRELOAD=/usr/lib64/libjemalloc.so.2:$LD_PRELOAD

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

##### 2, 配置日志相关环境变量
rm -rf /root/atb/log/
rm -rf /root/ascend/log/

rm -rf core.*
export ASDOPS_LOG_LEVEL=ERROR
export ASDOPS_LOG_TO_STDOUT=1
export ASDOPS_LOG_TO_FILE=1

##### 3. 配置性能、通信相关环境变量
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export NPU_MEMORY_FRACTION=0.96
export ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE=3
export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1

export OMP_NUM_THREADS=12
export ALLOW_INTERNAL_FORMAT=1

export ATB_LAYER_INTERNAL_TENSOR_REUSE=1
export ATB_LLM_ENABLE_AUTO_TRANSPOSE=0
export ATB_CONVERT_NCHW_TO_ND=1
export ATB_LAUNCH_KERNEL_WITH_TILING=1
export ATB_OPERATION_EXECUTE_ASYNC=2
export ATB_CONTEXT_WORKSPACE_SIZE=0
export INF_NAN_MODE_ENABLE=1
export HCCL_EXEC_TIMEOUT=0
export HCCL_CONNECT_TIMEOUT=7200
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_IF_BASE_PORT=2864

启动命令 - GLM-4.6V BF16版本

BATCH_SIZE=256
#推理最大batch数量
XLLM_PATH="./myxllm/xllm/build/xllm/core/server/xllm"
#推理入口文件路径(上一步中编译产物)
MODEL_PATH=/export/home/models/GLM-4.6V
#模型路径

MASTER_NODE_ADDR="11.87.49.110:10015"
LOCAL_HOST="11.87.49.110"
# Service Port
START_PORT=18994
START_DEVICE=0
LOG_DIR="logs"
NNODES=8 # Flash版本建议单卡; Air版本建议8卡

for (( i=0; i<$NNODES; i++ ))
do
  PORT=$((START_PORT + i))
  DEVICE=$((START_DEVICE + i))
  LOG_FILE="$LOG_DIR/node_$i.log"
  nohup numactl -C $((DEVICE*12))-$((DEVICE*12+11)) $XLLM_PATH \
    --model $MODEL_PATH  -model_id glm_46v \
    --host $LOCAL_HOST \
    --port $PORT \
    --devices="npu:$DEVICE" \
    --master_node_addr=$MASTER_NODE_ADDR \
    --nnodes=$NNODES \
    --node_rank=$i \
    --max_memory_utilization=0.86 \
    --max_tokens_per_batch=40000 \
    --max_seqs_per_batch=$BATCH_SIZE \
    --communication_backend=hccl \
    --enable_schedule_overlap=true \
    --enable_prefix_cache=true \
    --enable_chunked_prefill=false \
    --enable_shm=true \
    > $LOG_FILE 2>&1 &
done

#numactl -C $((DEVICE*12))-$((DEVICE*12+11))      
#                           亲和性绑核(亲和性查询命令: npu-smi info -t topo) 可根据实际核数与亲和性修改
#--max_memory_utilization   单卡最大显存占用比例
#--max_tokens_per_batch     单batch最大token数  (主要限制prefill)
#--max_seqs_per_batch       单batch最大请求数   (主要限制decoe)
#--communication_backend    通信backend 建议hccl
#--enable_schedule_overlap  开启异步调度
#--enable_prefix_cache      开启prefix_cache
#--enable_chunked_prefill   开启chunked_prefill
#--enable_acl_graph         开启aclgraph

日志出现"Brpc Server Started"表示服务成功拉起。拉起成功截图:

success

简单推理验证

接口样例

操作类型:POST

URL:https://{ip}:{port}/v1/chat/completions

消息体样例

{
    "model": "glm_46v",
    "messages": [{
        "role": "user",
        "content": [
           {"type": "text", "text": "介绍一下该图片"},
           {"type": "image_url", "image_url": {"url": "image_url"}}
           //{"type": "video_url", "video_url": {"url": "video_url"}} # 视频理解
        ]
    }],
    "max_tokens": 256, 
    "stream": false, 
    "temperature": 0.2
}

其他可选环境变量

#开启确定性计算
export LCCL_DETERMINISTIC=1
export HCCL_DETERMINISTIC=true
export ATB_MATMUL_SHUFFLE_K_ENABLE=0

#开启动态profiling模式
export PROFILING_MODE=dynamic
\rm -rf ~/dynamic_profiling_socket_*

测试结果

xLLM 在 A3 设备上性能强劲,欢迎在 这里 查看测试报告。