连续批处理(实验性质)#
连续批处理是诸如 VLLM 这样的推理引擎中提升吞吐的重要技术。Xinference 旨在通过这项技术提升 transformers 推理引擎的吞吐。
使用方式#
当前,此功能在满足以下条件时开启:
首先,启动 Xinference 时需要将环境变量
XINFERENCE_TRANSFORMERS_ENABLE_BATCHING置为1。
XINFERENCE_TRANSFORMERS_ENABLE_BATCHING=1 xinference-local --log-level debug
然后,启动 LLM 模型时选择
transformers推理引擎。例如:
xinference launch -e <endpoint> --model-engine transformers -n qwen1.5-chat -s 4 -f pytorch -q none
curl -X 'POST' \
'http://127.0.0.1:9997/v1/models' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model_engine": "transformers",
"model_name": "qwen1.5-chat",
"model_format": "pytorch",
"size_in_billions": 4,
"quantization": "none"
}'
from xinference.client import Client
client = Client("http://127.0.0.1:9997")
model_uid = client.launch_model(
model_engine="transformers",
model_name="qwen1.5-chat",
model_format="pytorch",
model_size_in_billions=4,
quantization="none"
)
print('Model uid: ' + model_uid)
一旦此功能开启,LLM 模型的所有接口将被此功能接管。所有接口的使用方式没有任何变化。
中止请求#
此功能中,你可以优雅地中止正在推理中的请求。
首先,在推理请求的
generate_config中指定request_id选项。例如:
from xinference.client import Client
client = Client("http://127.0.0.1:9997")
model = client.get_model("<model_uid>")
model.chat("<prompt>", generate_config={"request_id": "<your_unique_request_id>"})
接着,带着你指定的
request_id去中止该请求。例如:
from xinference.client import Client
client = Client("http://127.0.0.1:9997")
client.abort_request("<model_uid>", "<your_unique_request_id>")
注意,如果你的请求已经结束,那么此操作将什么都不做。
注意事项#
当前,此功能仅支持 LLM 模型的
generate,chat和vision(多模态) 功能。tool call(工具调用)暂时不支持。对于多模态任务,当前支持
qwen-vl-chat,cogvlm2和glm-4v模型。未来将加入更多模型,敬请期待。如果使用 GPU 推理,此功能对显存要求较高。因此请谨慎提高对同一个模型的并发请求量。
launch_model接口提供可选参数max_num_seqs用于调整并发度,默认值为16。此功能仍处于实验阶段,欢迎反馈任何问题。
一段时间的测试之后,此功能将代替原来的 transformers 推理逻辑成为默认行为。原来的推理逻辑将被摒弃。