Qwen1.5 is the beta version of Qwen2, a transformer-based decoder-only language model pretrained on a large amount of data. In comparison with the previous released Qwen, the improvements include:
trust_remote_code.For more details, please refer to our blog post and GitHub repo.
Qwen1.5 is a language model series including decoder language models of different model sizes. For each size, we release the base language model and the aligned chat model. It is based on the Transformer architecture with SwiGLU activation, attention QKV bias, group query attention, mixture of sliding window attention and full attention, etc. Additionally, we have an improved tokenizer adaptive to multiple natural languages and codes. For the beta version, temporarily we did not include GQA (except for 32B) and the mixture of SWA and full attention.
The code of Qwen1.5 has been in the latest Hugging face transformers and we advise you to install transformers>=4.37.0, or you might encounter the following error:
KeyError: 'qwen2'.从魔乐社区镜像中心MindIE板块获取到镜像包,例如mindie:1.0.RC3-800I-A2-arm64-OpenMind,运行如下命令:
docker pull registry.modelers.cn/base_image/mindie:1.0.RC3-800I-A2-arm64-OpenMind完成之后,请使用docker images命令确认查找具体镜像名称与标签。
下载魔乐仓库承载的模型代码,可以使用:
git clone https://modelers.cn/MindIE/qwen1.5_72b_chat.git目录结构应为如下:
├── qwen1.5_72b_chat
│ ├── README.md
│ └── atb_models获取模型权重
本地已有模型权重 从您信任的来源自行获取权重后,放置在从上述下载的模型代码的主目录下,放置后的目录结构应为如下:
├── qwen1.5_72b_chat
│ ├── README.md
│ └── atb_models
│ └── 权重文件1
│ ...
│ ...
│ └── 权重文件n本地没有模型权重 我们提供模型权重下载脚本,支持HuggingFace,ModelScope以及Modelers来源的模型下载,用法如下
atb_models/build/weights_url.yaml文件中对应repo_id,当前已默认配置模型官方认可的下载地址,如您有其他信任来源的repo_id,可自行修改,默认配置如下:HuggingFace: Qwen/Qwen1.5-72B-Chat
ModelScope: Qwen/Qwen1.5-72B-Chat
Modelers: Noneatb_models/build/download_weights.py:| 参数名 | 含义 |
|---|---|
| hub | 可选,str类型参数,hub来源,支持HuggingFace, ModelScope, Modelers |
| repo_id | 可选,str类型参数,仓库ID,默认从weight_url.yaml中读取 |
| target_dir | 可选,str类型参数,默认放置在atb_models同级目录下 |
修改模型文件夹属组为1001,执行权限为750,执行:
chown -R 1001:1001 /path-to-weights/qwen1.5_72b_chat
chmod -R 750 /path-to-weights/qwen1.5_72b_chat-v /path-to-weights/qwen1.5_72b_chat:/home/HwHiAiUser/Ascend/qwen1.5_72b_chat,同时设置模型路径为--model /home/HwHiAiUser/Ascend/qwen1.5_72b_chat。docker run --shm-size=1g \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/sbin:/usr/local/sbin \
-v /path-to-weights/qwen1.5_72b_chat:/home/HwHiAiUser/Ascend/qwen1.5_72b_chat \
mindie:1.0.RC3-800I-A2-arm64-OpenMind \
--model /home/HwHiAiUser/Ascend/qwen1.5_72b_chat执行命令后,首先会打印本次启动所用的所有参数,然后直到出现以下输出:
Daemon start success!则认为服务成功启动。
通过修改mindie:1.0.RC3-800I-A2-arm64-OpenMind后的参数(比如--model参数),来实现不同的操作,比如切换后端,指定NPU卡等。
更多信息可参考官网信息:MindIE Service
在启动MindIE服务时,除了通过 --model 参数来指定模型权重路径,还可以配置以下参数来优化服务性能和定制运行环境,更多参数说明请参考配置参数说明文档:
--model
"/path-to-weights/model-name"--model-name
--model路径提取)。--model的路径中提取名称。--max-seq-len
2560--max-iter-times
512--max-seq-len相关,表示最大生成长度。--max-input-token-len
2048--max-prefill-tokens
8192--npu-device-ids
"0,1,2,3")。--world-size
--npu-device-ids,必须要保证此项与其数量一致。--template-type
"Standard"--max-preempt-count
0maxBatchSize],当取值大于0时,cpuMemSize取值不可为0。--support-select-batchfalse表示每一轮调度时,优先调度和执行prefill阶段的请求。true表示每一轮调度时,根据当前prefill与decode请求的数量,自适应调整prefill和decode阶段请求调度和执行的先后顺序。falsetrue或false。--npu-mem-size-1时自动分配。-1,当后端为ms时,默认值为8--max-prefill-batch-size50--ip"0.0.0.0"--port9811--management-ip"0.0.0.0"--management-port9811--metrics-port9812--management-port设为相同值。现在所有的日志的全部会打印至标准输出终端(一般来讲也就是屏幕),如需保存日志,需要自行重定向输出来进行保存。
从宿主机上访问容器中的日志,可以执行以下命令:
docker logs -f <container-id>直接修改挂载的--device,即可指定使用哪些卡。
注意,只能挂载1/2/4/8这样的数量,不能挂载3/5/6/7这样的数量。
docker run --net=host --shm-size=1g \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci0 \
--device=/dev/davinci2 \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/sbin:/usr/local/sbin \
-v /path-to-weights/qwen1.5_72b_chat:/home/HwHiAiUser/Ascend/qwen1.5_72b_chat \
mindie:1.0.RC3-800I-A2-arm64-OpenMind \
--model /home/HwHiAiUser/Ascend/qwen1.5_72b_chat此时便指定了服务框架将在0号和2号卡上运行。
目前支持在单机上启动多个容器,各自挂载不同设备,具体有以下几点要求:
docker run --net=host --shm-size=1g \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
...--ipc==host,会导致进程间通信出问题,第一个容器可以启动,第二个容器就无法启动,必须设置--shm-size=1g。--port,--management-port和--metrics-port。下面给出一个具体的例子,首先是第一个容器启动,使用6和7卡:
docker run --net=host --shm-size=1g \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/sbin:/usr/local/sbin \
-v /path-to-weights/qwen1.5_72b_chat:/home/HwHiAiUser/Ascend/qwen1.5_72b_chat \
mindie:1.0.RC3-800I-A2-arm64-OpenMind \
--model /home/HwHiAiUser/Ascend/qwen1.5_72b_chat
--port 9811 \
--management-port 9811 \
--metrics-port 9812等待第一个容器启动成功后,再使用以下命令启动第二个容器,使用4和5卡:
docker run --net=host --shm-size=1g \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/sbin:/usr/local/sbin \
-v /path-to-weights/qwen1.5_72b_chat:/home/HwHiAiUser/Ascend/qwen1.5_72b_chat \
mindie:1.0.RC3-800I-A2-arm64-OpenMind \
--model /home/HwHiAiUser/Ascend/qwen1.5_72b_chat
--port 9813 \
--management-port 9813 \
--metrics-port 9814使用本镜像需要保证“在宿主机上ID是1001的用户(默认的HwHiAiUser)可以使用设备”,也就是说需要保证ID为1001的用户(一般就是HwHiAiUser)可以执行npu-smi指令,正确识别设备。如果ID为1001的用户无法使用,需要重装驱动并添加--install-for-all参数。
若默认的HwHiAiUser用户对应的ID不为1001,如1000,则需docker启动命令中加入以下参数:--user 1001:1000
注意保证权重路径是可用的,执行以下命令修改权限,注意是整个父级目录的权限:
chown -R HwHiAiUser:HwHiAiUser /path-to-weights
chmod -R 750 /path-to-weights请优先使用--shm-size=1g参数,避免使用--ipc=host参数,已知后者可能会出现空间不足,导致多实例启动失败等问题。
如果想在服务启动失败后停留在容器内排查问题,可以在docker run命令后添加-it参数,添加后,如果服务启动失败,则会进入/bin/bash,方便调试。如果不添加,则默认服务启动失败后容器终止。
启动容器后,docker exec -it <container-id> bash进入容器,发现命令提示符前缀为HwHiAiUser,则证明为非root用户运行,如下:
HwHiAiUser@localhost:~$If you find our work helpful, feel free to give us a cite.
@article{qwen2,
title={Qwen2 Technical Report},
year={2024}
}