AI开发平台MODELARTS-启动推理服务(多模态模型):多模态推理请求
时间:2025-12-15 17:54:45
多模态推理请求
通过online_serving.py方式发送请求(单图单轮对话)
由于多模态推理涉及图片的编解码,所以采用脚本方式调用服务API。脚本中需要配置的参数如表1 脚本参数说明所示。
import base64
import requests
import argparse
import json
from typing import List
# Function to encode the image
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
def get_stop_token_ids(model_path):
with open(f"{model_path}/config.json") as file:
data = json.load(file)
if data.get('architectures')[0] == "InternVLChatModel":
return [0, 92543, 92542]
return None
def post_img(args):
# Path to your image
image_path = args.image_path
# Getting the base64 string
image_base64 = encode_image(image_path)
stop_token_ids = args.stop_token_ids if args.stop_token_ids is not None else get_stop_token_ids(args.model_path)
headers = {
"Content-Type": "application/json"
}
payload = {
"model": args.model_path,
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": args.text
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{image_base64}"
}
}
]
}
],
"max_tokens": args.max_tokens,
"temperature": args.temperature,
"ignore_eos": args.ignore_eos,
"stream": args.stream,
"top_k": args.top_k,
"top_p": args.top_p,
"stop_token_ids": stop_token_ids,
"repetition_penalty": args.repetition_penalty,
}
response = requests.post(f"http://{args.docker_ip}:{args.served_port}/v1/chat/completions", headers=headers, json=payload)
print(response.json())
if __name__ == "__main__":
parser = argparse.ArgumentParser()
# 必填
parser.add_argument("--model-path", type=str, required=True)
parser.add_argument("--image-path", type=str, required=True)
parser.add_argument("--docker-ip", type=str, required=True)
parser.add_argument("--served-port", type=str, required=True)
parser.add_argument("--text", type=str, required=True)
# 选填
parser.add_argument("--temperature", type=float, default=0) # 输出结果的随机性。可选
parser.add_argument("--ignore-eos", type=bool, default=False) # 在生成过程中是否忽略结束符号,在生成EOS token后继续生成token。可选
parser.add_argument("--top-k", type=int, default=-1) # 参数控制着生成结果的多样性。其值越小,生成的文本就越独特,但可能缺乏连贯性。相反,其值越大,文本就越连贯,但多样性也会降低。可选
parser.add_argument("--top-p", type=int, default=1.0) # 参数的取值范围为0到1。值越小,生成的内容就越意外,但可能牺牲连贯性。值越大,内容就越连贯,但意外性也会减弱。可选
parser.add_argument("--stream", type=int, default=False) # 是否开启流式推理。默认为False,表示不开启流式推理。
parser.add_argument("--max-tokens", type=int, default=16) # 生成序列的最大长度。必选
parser.add_argument("--repetition-penalty", type=float, default=1.0) # 减少重复生成文本的概率。可选
parser.add_argument("--stop-token-ids", nargs='+', type=int, default=None) # 停止tokens列表。可选
args = parser.parse_args()
post_img(args)
运行此脚本:
python online_serving.py --model-path ${container_model_path} --image-path ${image_path} --docker-ip ${docker_ip} --served-port ${port} --text 图片内容是什么
相关请求参数说明参照多模态相关请求参数说明。
图5 输入示例图
推理输出结果如下图所示。
图6 推理输出结果示意图
support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5906025.html
下载AI开发平台MODELARTS用户手册完整版