(P1) FastChat 简介
动机、参考资料、涉及内容
先暂时记录启动方式, 后续再看要不要深入
使用方法
注册多个模型的方法
依赖
# python 3.11, cuda 12.1
pip install fschat[model_worker,webui]
pip install vllm
分别用 4 个终端启动 (参考: https://github.com/lm-sys/FastChat/blob/main/README.md 和 https://github.com/lm-sys/FastChat/blob/main/playground/FastChat_API_GoogleColab.ipynb)
TODO:
下面这种方案能成功运行, 但 seed 参数似乎不起作用, 猜测可能需要用这个方案: vllm.entrypoints.openai.api_server
启动 + fastchat.serve.llm_worker
启动, 每个模型需要 2 个终端
python3 -m fastchat.serve.controller # 默认端口号是 21002
# 启动模型 1:
# (方法1) 使用 fastchat 对 vllm 的集成
# CUDA_VISIBLE_DEVICES=0 python3 -m fastchat.serve.vllm_worker --model-path /home/buxian/wsl2-test/gpt-2 --model-names gpt-2 --controller http://localhost:21001 --port 31000 --worker-address http://localhost:31000
# (方法2) 使用 huggingface transformers 的方式推理
CUDA_VISIBLE_DEVICES=0 python3 -m fastchat.serve.model_worker --model-path /home/buxian/wsl2-test/gpt-2 --model-names gpt-2 --controller http://localhost:21001 --port 31000 --worker http://localhost:31000
# 启动模型 2:
# (方法1) 使用 fastchat 对 vllm 的集成
# CUDA_VISIBLE_DEVICES=0 python3 -m fastchat.serve.vllm_worker --model-path /home/buxian/wsl2-test/opt-125m --model-names opt-125m,facebook/opt-125m --controller http://localhost:21001 --port 31001 --worker-address http://localhost:31001
# (方法2) 使用 huggingface transformers 的方式推理
-port 31001 --worker-address http://localhost:31001
CUDA_VISIBLE_DEVICES=0 python3 -m fastchat.serve.model_worker --model-path /home/buxian/wsl2-test/opt-125m --model-names opt-125m,facebook/opt-125m --controller http://localhost:21001 --port 31001 --worker http://localhost:31001
# 转换为 openai api 接口: 打开 http://127.0.0.1:8000/docs 观察文档, 似乎不包含 seed 参数
# 而 http://127.0.0.1:31001/docs 和 http://127.0.0.1:31000/docs 和 http://127.0.0.1:21001/docs 暂时没观察到跟模型推理有关的信息, 有点奇怪
python3 -m fastchat.serve.openai_api_server --host 0.0.0.0 --controller-address http://127.0.0.1:21001 --port 8000
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="token-abc123",
)
xs = []
for i in range(2):
completion = client.chat.completions.create(
model="gpt-2",
messages=[
{"role": "user", "content": "Hello!"}
],
seed=1,
max_tokens=200,
)
xs.append(completion.choices[0].message.content)
xs[0] == xs[1] # False
vllm 的 entrypoint 启动方式
可以允许传入随机种子 seed 参数, 且确实输出值是相同的
备注: 假设遇到类似这种错误
The client socket has failed to connect to any network address of (172.19.16.1, 53929)
请参考: issue
# 似乎无法指定 model-name
python -m vllm.entrypoints.openai.api_server --model /home/buxian/wsl2-test/gpt-2 --tokenizer /home/buxian/wsl2-test/gpt-2 --dtype auto --port 8000 --host 0.0.0.0
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="token-abc123",
)
xs = []
for i in range(2):
completion = client.chat.completions.create(
model="/home/buxian/wsl2-test/gpt-2",
messages=[
{"role": "user", "content": "Hello!"}
],
seed=1,
max_tokens=200,
)
xs.append(completion.choices[0].message.content)
xs[0] == xs[1] # True