昇腾使用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

八、测试

另外开启一个窗口,发送请求进行推理测试

1generate接口

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)。

 

2infer

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。

3openai接口

单轮对话

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。

4vllm接口

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。

5triton接口

文本推理接口

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"。

posted @ 2024-07-31 20:49  A肆  阅读(8)  评论(0)    收藏  举报