昇腾使用docker部署mindie-service(部署对话模型)
一、docker环境准备
1、安装docker
#下载阿里云的安装脚本:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#这条命令会自动检测你的操作系统类型和版本,然后从阿里云的Docker镜像库安装Docker。
#启动Docker守护进程(如果脚本没有自动启动):
sudo systemctl start docker
#设置Docker开机自启:
sudo systemctl enable docker
#检查Docker版本:
docker --version
2、下载镜像
访问http://mirrors.cn-central-221.ovaijisuan.com/mirrors.html 并登录搜索mindie
点击右上角用户名——镜像下载凭证,进行下载凭证设置(即pull镜像时的password)
选择镜像版本,点击“立即下载”
复制命令执行,password为刚设置的下载凭证
二、编写 docker 启动脚本 start-docker.sh 如下
IMAGES_ID=$1
NAME=$2
if [ $# -ne 2 ]; then
echo "error: need one argument describing your container name."
exit 1
fi
docker run --name ${NAME} -it -d --net=host --shm-size=500g \
--privileged=true \
-w /home \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--entrypoint=bash \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/sbin:/usr/local/sbin \
-v /home:/home \
-v /tmp:/tmp \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
-e http_proxy=$http_proxy \
-e https_proxy=$https_proxy \
${IMAGES_ID}
参数说明:
- IMAGES_ID 为镜像版本号。(docker images 命令回显中的 IMAGES ID)
- NAME 为启动容器名,可自定义设置。
三、依次执行如下命令启动并进入容器:
# 用户可以设置 docker images 命令回显中的 IMAGES ID
image_id=001b7368f6e0
# 用户可以自定义设置镜像名
custom_image_name=glm3
# 启动容器(确保启动容器前,本机可访问外网)
bash start-docker.sh ${image_id} ${custom_image_name}
# 进入容器
docker exec -itu root ${custom_image_name} bash
四、昇腾CANN软件栈
cd /opt/package
# 安装CANN包
source install_and_enable_cann.sh
# 若退出后重新进入容器,则需要重新加载 CANN 环境变量,执行以下三行命令
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/mindie/set_env.sh
source /usr/local/Ascend/llm_model/set_env.sh
五、进入mindie service目录
cd /usr/local/Ascend/mindie/latest/mindie-service
六、修改配置文件
vim /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json
修改httpsEnabled为false
修改modelWeightPath为自己的模型路径
# 默认是2卡,单卡npuDeviceIds、worldSize需修改为下面的值
修改npuDeviceIds为[[0,1]]
修改worldSize为2

七、启动mindie服务
./bin/mindieservice_daemon
八、测试
另外开启一个窗口,发送请求进行推理测试
1、generate接口
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"inputs": "你好,你是谁",
"parameters": {
"best_of": 1,
"decoder_input_details": false,
"details": true,
"do_sample": true,
"repetition_penalty": 1.03,
"return_full_text": false,
"seed": 10,
"stop": [
"photographer"
],
"temperature": 0.5,
"top_k": 10,
"top_n_tokens": 5,
"top_p": 0.95,
"truncate": null,
"typical_p": 0.95,
"watermark": true
},
"stream": false
}' http://127.0.0.1:1025/generate
或者
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"inputs": "hi",
"parameters": {
"best_of": 1,
"decoder_input_details": false,
"details": true,
"do_sample": true,
"repetition_penalty": 1.03,
"return_full_text": false,
"seed": 10,
"stop": [
"photographer"
],
"temperature": 0.5,
"top_k": 10,
"top_n_tokens": 5,
"top_p": 0.95,
"truncate": null,
"typical_p": 0.95,
"watermark": true
},
"stream": true
}' http://127.0.0.1:1025/generate_stream
请求参数
|
参数 |
是否必选 |
说明 |
取值要求 |
|
inputs |
必选 |
推理请求文本 |
非空,0<字符数<=16000,支持中英文。tokenizer之后的token数量<=maxSeqLen-maxIterTimes(配置文件读取)。 |
|
decoder_input_details |
可选 |
是否返回推理请求文本的token id。如果stream=true,该参数不能为true。 |
bool类型,默认值false |
|
details |
可选 |
是否返回推理详细输出结果。根据TGI 0.9.4接口行为,decoder_input_details和details字段任意一个为true,即返回所有的details信息。 |
bool类型,默认值false |
|
do_sample |
可选 |
是否做sampling |
bool类型,默认值false |
|
max_new_tokens |
可选 |
允许的最大新标记数目。控制从模型生成的文本中添加到最终输出中的最大词汇数量。该字段受到GIMIS配置文件maxIterTimes参数影响,推理token输出长度<=maxIterTimes。 |
int类型,取值范围(0,maxIterTimes)。默认值20。 |
|
repetition_penalty |
可选 |
重复惩罚用于减少在文本生成过程中出现重复片段的概率。它对之前已经生成的文本进行惩罚,使得模型更倾向于选择新的、不重复的内容。 |
float类型,大于0,默认值1.0。1.0表示不进行重复度惩罚。大于1.0表示对重复进行惩罚。 |
|
return_full_text |
可选 |
是否将推理请求文本(inputs参数)添加到推理结果前面。 |
bool类型,默认值false。true表示添加。false表示不添加 |
|
seed |
可选 |
用于指定推理过程的随机种子,相同的seed值可以确保推理结果的可重现性,不同的seed值会提升推理结果的随机性。 |
uint_64类型,取值范围(0,18446744073709551615],不传递该参数,系统会产生一个随机seed值。 |
|
temperature |
可选 |
控制生成的随机性,较高的值会产生更多样化的输出。 |
float类型,取值大于0,默认值1.0。1.0表示不进行计算。大于1.0表示输出随机性提高。 |
|
top_k |
可选 |
控制模型生成过程中考虑的词汇范围,只从概率最高的k个候选词中选择。使用限制请参见3-使用限制。 |
int类型,取值范围(0,vocabSize)&&(0,2147483647],默认值0。 |
|
top_p |
可选 |
控制模型生成过程中考虑的词汇范围,使用累计概率选择候选词,直到累计概率超过给定的阈值。该参数也可以控制生成结果的多样性,它基于累积概率选择候选词,直到累计概率超过给定的阈值为止。 |
float类型,取值范围(0, 1),默认值1。 |
|
truncate |
可选 |
输入文本做tokenizer之后,将token数量截断到该长度。读取截断后的n个token。 |
int类型,取值范围(0,maxSeqLen-maxIterTimes],默认值0(表示不做truncate)。 |
2、infer
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"inputs": "hi",
"stream": false,
"parameters": {
"temperature": 1.1,
"top_k": 10,
"top_p": 0.95,
"do_sample": true,
"seed": 10,
"repetition_penalty": 1.03,
"typical_p": null,
"watermark": true
}
}' http://127.0.0.1:1025/infer
或者
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"inputs": "hi",
"stream": true,
"parameters": {
"temperature": 1.1,
"top_k": 10,
"top_p": 0.95,
"do_sample": true,
"seed": 10,
"repetition_penalty": 1.03,
"typical_p": null,
"watermark": true
}
}' http://127.0.0.1:1025/infer
请求参数
|
参数名 |
是否必选 |
说明 |
取值要求 |
|
inputs |
必选 |
推理请求文本 |
非空,0<字符数<=16000,支持中英文。tokenizer之后的token数量<=maxSeqLen-maxIterTimes(配置文件读取) |
|
do_sample |
可选 |
是否做sampling。 |
bool类型,默认值false。 |
|
repetition_penalty |
可选 |
重复惩罚用于减少在文本生成过程中出现重复片段的概率。它对之前已经生成的文本进行惩罚,使得模型更倾向于选择新的、不重复的内容。 |
float类型,大于0,默认值1.0。1.0表示不进行重复度惩罚。大于1.0表示对重复进行惩罚 |
|
seed |
可选 |
用于指定推理过程的随机种子,相同的seed值可以确保推理结果的可重现性,不同的seed值会提升推理结果的随机性。 |
uint_64类型,取值范围(0,18446744073709551615],不传递该参数,系统会产生一个随机seed值。 |
|
temperature |
可选 |
控制生成的随机性,较高的值会产生更多样化的输出。 |
float类型,大于0,默认值1.0。1.0表示不进行计算。大于1.0表示输出随机性提高。 |
|
top_k |
可选 |
控制模型生成过程中考虑的词汇范围,只从概率最高的k个候选词中选择。使用限制请参见3-使用限制。 |
int类型,取值范围(0,vocabSize)&&(0, 2147483647],默认值0。 |
|
top_p |
可选 |
控制模型生成过程中考虑的词汇范围,使用累计概率选择候选词,直到累计概率超过给定的阈值。该参数也可以控制生成结果的多样性,它基于累积概率选择候选词,直到累计概率超过给定的阈值为止。 |
float类型,取值范围(0, 1),默认值1.0。 |
|
stream |
可选 |
指定返回结果是文本推理还是流式推理。 |
bool类型,默认值false。 |
|
details |
可选 |
是否返回推理详细输出结果。 |
bool类型,默认值false。 |
3、openai接口
单轮对话
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"model": "chatglm3",
"stream": false,
"messages": [
{
"role": "system",
"content": "介绍一下你自己"
}
]
}' http://127.0.0.1:1025/v1/chat/completions
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"model": "llama_65b",
"stream": true,
"messages": [
{
"role": "system",
"content": "who are you"
}
]
}' http://127.0.0.1:1025/v1/chat/completions
多轮对话
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"model": "llama_65b",
"stream": false,
"max_tokens": 100,
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "who are you?"
},
{
"role": "assistant",
"content": "I am a helpful assistant."
},
{
"role": "user",
"content": "can you translate some articles?"
}
]
}' http://127.0.0.1:1025/v1/chat/completions
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"model": "llama_65b",
"stream": true,
"max_tokens": 100,
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "who are you?"
},
{
"role": "assistant",
"content": "I am a helpful assistant."
},
{
"role": "user",
"content": "can you translate some articles?"
}
]
}' http://127.0.0.1:1025/v1/chat/completions
注意:
1、运行环境的transformers版本不可低于4.35.0,低版本tokenizer不支持"chat_template"方法;
2、推理模型权重路径下的tokenizer_config.json需要包含"chat_template"字段及其实现;
chat_template示例:
"chat\_template": "{% for message in messages %}{% if loop.first and
messages[0]['role'] != 'system' %}{{ '<|im\_start|>system\\nYou are a helpful
assistant<|im\_end|>\\n' }}{% endif %}{{'<|im\_start|>' + message['role'] +
'\\n' + message['content'] + '<|im\_end|>' + '\\n'}}{% endfor %}{% if
add\_generation\_prompt %}{{ '<|im\_start|>assistant\\n' }}{% endif %}",
请求参数
|
参数 |
是否必选 |
说明 |
取值要求 |
|
model |
必选 |
模型名,当前不校验该字段 |
- |
|
message |
必选 |
推理请求消息结构。 |
List类型。 |
|
role |
可选 |
推理请求消息角色,当前不处理该字段 |
- |
|
content |
必选 |
推理请求文本。 |
非空,0<字符数<=16000,支持中英文。tokenizer之后的token数量<=maxSeqLenmaxIterTimes(配置文件读取)。 |
|
max_tokens |
可选 |
允许的最大新标记数目。控制从模型生成的文本中添加到最终输出中的最大词汇数量。该字段受到GIMIS配置文件maxIterTimes参数影响,推理token输出长度<=maxIterTimes。 |
int类型,取值范围(0,maxIterTimes]。默认值16。 |
|
presence_penalty |
可选 |
存在惩罚介于-2.0和2.0之间,它影响模型如何根据到目前为止是否出现在文本中来惩罚新token。正值将通过惩罚已经使用的词,增加模型谈论新主题的可能性。 |
float类型,取值范围[-2.0, 2.0],默认值0.0。 |
|
frequency_penalty |
可选 |
频率惩罚介于-2.0和2.0之间,它影响模型如何根据文本中词汇(token)的现有频率惩罚新词汇(token)。正值将通过惩罚已经频繁使用的词来降低模型一行中重复用词的可能性 |
float类型,取值范围[-2.0, 2.0],默认值0.0。 |
|
seed |
可选 |
用于指定推理过程的随机种子,相同的seed值可以确保推理结果的可重现性,不同的seed值会提升推理结果的随机性。 |
int_64类型,取值范围(0,9223372036854775807],不传递该参数,系统会产生一个随机seed值。 |
|
temperature |
可选 |
控制生成的随机性,较高的值会产生更多样化的输出。 |
float类型,大于0,默认值1.0。1.0表示不进行计算。大于1.0表示输出随机性提高。 |
|
top_p |
可选 |
控制模型生成过程中考虑的词汇范围,使用累计概率选择候选词,直到累计概率超过给定的阈值。该参数也可以控制生成结果的多样性,它基于累积概率选择候选词,直到累计概率超过给定的阈值为止。 |
float类型,取值范围(0,1 ],默认值1.0。 |
|
stream |
可选 |
指定返回结果是文本推理还是流式推理。 |
bool类型参数,默认值false。 |
4、vllm接口
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"prompt": "My name is Olivier and I love",
"stream": false,
"repetition_penalty": 1,
"top_p": 1,
"top_k": 10,
"max_tokens": 16,
"temperature": 1
}' http://127.0.0.1:1025/generate
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"prompt": "My name is Olivier and I love",
"stream": true,
"repetition_penalty": 1,
"top_p": 1,
"top_k": 10,
"max_tokens": 16,
"temperature": 1
}' http://127.0.0.1:1025/generate
请求参数
|
参数 |
是否必选 |
说明 |
取值要求 |
|
prompt |
必选 |
推理请求文本。 |
非空,0<字符数<=16000,支持中英文。tokenizer之后的token数量<=maxSeqLenmaxIterTimes(配置文件读取)。 |
|
presence_penalty |
可选 |
存在惩罚介于-2.0和2.0之间,它影响模型如何根据到目前为止是否出现在文本中来惩罚新token。正值将通过惩罚已经使用的词,增加模型谈论新主题的可能性。 |
float类型,取值范围[-2.0,2.0],默认值0。 |
|
frequency_penalty |
可选 |
频率惩罚介于-2.0和2.0之间,它影响模型如何根据文本中词汇(token)的现有频率惩罚新词汇(token)。正值将通过惩罚已经频繁使用的词来降低模型一行中重复用词的可能性。 |
float类型,取值范围[-2.0,2.0],默认值0。 |
|
repetition_penalty |
可选 |
重复惩罚用于减少在文本生成过程中出现重复片段的概率。它对之前已经生成的文本进行惩罚,使得模型更倾向于选择新的、不重复的内容 |
float类型,取值大于0,默认值1.0。1.0表示不进行重复度惩罚。大于1.0表示对重复进行惩罚。 |
|
max_tokens |
可选 |
允许的最大新标记数目。控制从模型生成的文本中添加到最终输出中的最大词汇数量。该字段受到GIMIS配置文件maxIterTimes参数影响,推理token输出长度<=maxIterTimes。 |
int类型,取值范围(0,maxIterTimes]。默认值16。 |
|
temperature |
可选 |
控制生成的随机性,较高的值会产生更多样化的输出。1.0表示不进行计算,大于1.0表示输出随机性提高。temperature=0,即采用greedy sampling,该参数映射到后处理的1.0。 |
float类型,取值>=0,默认值1.0。 |
|
top_k |
可选 |
控制模型生成过程中考虑的词汇范围,只从概率最高的k个候选词中选择。-1表示不进行top k计算。使用限制请参见3-使用限制。 |
int类型,取值范围-1或者(0, vocabSize)&&(0,2147483647],默认值-1 |
|
top_p |
可选 |
控制模型生成过程中考虑的词汇范围,使用累计概率选择候选词,直到累计概率超过给定的阈值。该参数也可以控制生成结果的多样性,它基于累积概率选择候选词,直到累计概率超过给定的阈值为止。 |
float类型,取值范围(0,1],默认值1.0。 |
|
stream |
可选 |
指定返回结果是文本推理还是流式推理。 |
bool类型,默认值false。 |
5、triton接口
文本推理接口
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"text_input": "My name is Olivier and I",
"parameters": {
"details": true,
"do_sample": true,
"max_new_tokens": 50,
"repetition_penalty": 1.1,
"seed": 123,
"temperature": 1,
"top_k": 256,
"top_p": 0.99,
"batch_size": 100
}
}' http://127.0.0.1:1025/v2/models/llama_65b/generate
请求参数
|
参数 |
是否必选 |
说明 |
取值要求 |
|
id |
可选 |
请求id。 |
stirng,非空。 |
|
text_input |
必选 |
推理请求文本。 |
非空,0<字符数<=16000,支持中英文。tokenizer之后的token数量<=maxSeqLenmaxIterTimes(配置文件读取)。 |
|
details |
可选 |
是否返回推理详细输出结果。 |
bool类型,默认值false。 |
|
do_sample |
可选 |
是否做sampling。 |
bool类型,默认值false。 |
|
max_new_tokens |
可选 |
允许的最大新标记数目。控制从模型生成的文本中添加到最终输出中的最大词汇数量。该字段受到GIMIS配置文件maxIterTimes参数影响,推理token输出长度<=maxIterTimes。 |
int类型,取值范围(0,maxIterTimes]。默认值20。 |
|
repetition_penalty |
可选 |
重复惩罚用于减少在文本生成过程中出现重复片段的概率。它对之前已经生成的文本进行惩罚,使得模型更倾向于选择新的、不重复的内容。 |
float类型,大于0,默认值1.0。1.0表示不进行重复度惩罚。大于1.0表示对重复进行惩罚。 |
|
seed |
可选 |
用于指定推理过程的随机种子,相同的seed值可以确保推理结果的可重现性,不同的seed值会提升推理结果的随机性。 |
uint_64类型,取值范围(0,18446744073709551615],不传递该参数,系统会产生一个随机seed值。 |
|
temperature |
可选 |
控制生成的随机性,较高的值会产生更多样化的输出。 |
float类型,大于0,默认值1.0。1.0表示不进行计算。大于1.0表示输出随机性提高。 |
|
top_k |
可选 |
控制模型生成过程中考虑的词汇范围,只从概率最高的k个候选词中选择。使用限制请参见3-使用限制。 |
int类型,取值范围[0,2147483647]&&[0, vocabSize),默认值0。 |
|
top_p |
可选 |
控制模型生成过程中考虑的词汇范围,使用累计概率选择候选词,直到累计概率超过给定的阈值。该参数也可以控制生成结果的多样性,它基于累积概率选择候选词,直到累计概率超过给定的阈值为止。 |
float类型,取值范围(0, 1],默认值1.0。 |
|
batch_size |
可选 |
推理请求batch_size。 |
int类型,大于0,默认值1。 |
token推理接口
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d'{
"id": "42",
"inputs": [
{
"name": "input0",
"shape": [
1,
65
],
"datatype": "UINT32",
"data": [529,29989,326,29918,2962,29989,29958,5205,13,3492,526,263,780,13563,7451,1058,23
37,10049,29879,297,278,3114,310,263,21625,403,29966,29989,326,29918,355,29989,299
58,13,29966,29989,326,29918,2962,29989,29958,1792,13,22110,526,366,29973,29966,29
989,326,29918,355,29989,29958,13,29966,29989,326,29918,2962,29989,29958,465,22137
,13]
}
],
"outputs": [
{
"name": "output0"
}
]
}' http://127.0.0.1:1025/v2/models/llama_65b/infer
请求参数
|
参数 |
是否必选 |
说明 |
取值范围 |
|
id |
可选 |
推理请求id。 |
字符串。 |
|
inputs |
必选 |
只有一个元素的数组。 |
|
|
outputs |
必选 |
推理结果输出结构。 |
object。 |
inputs参数
|
参数 |
是否必选 |
说明 |
取值范围 |
|
name |
必选 |
输入名称,固定"input0"。 |
"input0"。 |
|
shape |
必选 |
参数维度,1行,n列,和data长度相关。 |
(0, len(data)]。 |
|
dataType |
必选 |
data数据类型,目前场景仅支持UINT32,传递tokenid。 |
“UINT32”。 |
|
seed |
可选 |
用于指定推理过程的随机种子,相同的seed值可以确保推理结果的可重现性,不同的seed值会提升推理结果的随机性。 |
uint_64类型,取值范围,(0,18446744073709551615],不传递该参数,系统会产生一个随机seed值。 |
|
temperature |
可选 |
控制生成的随机性,较高的值会产生更多样化的输出。 |
float类型,大于0,默认值1.0。1.0表示不进行计算。大于1.0表示输出随机性提高。 |
|
top_k |
可选 |
控制模型生成过程中考虑的词汇范围,只从概率最高的k个候选词中选择。使用限制请参见3-使用限制。 |
int类型,取值范围[0,2147483647]&&[0, vocabSize)默认值0。 |
|
top_p |
可选 |
控制模型生成过程中考虑的词汇范围,使用累计概率选择候选词,直到累计概率超过给定的阈值。该参数也可以控制生成结果的多样性,它基于累积概率选择候选词,直到累计概率超过给定的阈值为止。 |
float类型,取值范围(0, 1],默认值1.0。 |
|
do_sample |
可选 |
是否做sampling。 |
bool类型,默认值false。 |
|
repetition_penalty |
可选 |
重复惩罚用于减少在文本生成过程中出现重复片段的概率。它对之前已经生成的文本进行惩罚,使得模型更倾向于选择新的、不重复的内容。 |
float类型,大于0,默认值1.0。1.0表示不进行重复度惩罚。大于1.0表示对重复进行惩罚。 |
|
max_new_tokens |
可选 |
允许的最大新标记数目。控制从模型生成的文本中添加到最终输出中的最大词汇数量。该字段受到GIMIS配置文件maxIterTimes参数影响,推理token输出长度<=maxIterTimes。 |
int类型,取值范围(0,maxIterTimes]。默认值20。 |
output参数
|
参数 |
是否必选 |
说明 |
取值范围 |
|
name |
必选 |
推理结果输出名。 |
只支持"output0"。 |

浙公网安备 33010602011771号