vLLM部署本地大模型进行在线调用
1.如何加载调用本地下载的大模型文件?
这里指的是如何使用本地大模型的预测功能,在实际项目中模型并不是仅仅作为单机程序运行,而是作为具体业务系统的服务模块。因此需要提供相应API接口为应用程序提供服务。
所以就有两种方式,(1)使用代码(比如python或C++等语言)或平台/工具(Ollama等)直接调用本地模型文件,(2)将大模型文件部署到服务端,使用API接口的方式调用,就像我们在网上使用其他平台的对话大模型一样。显然,第二种方式是部署业务更需要的。
2.使用vLLM部署大模型
软件环境:Ubuntu 22.04下进行相应的环境配置和部署,具体看“Ubuntu 本地化部署与微调开源大模型”部分。下面链接:
安装使用vLLM部署具体过程。
(1)Anaconda下创建一个新的虚拟环境并激活
conda create -n vllm_env python=3.10
conda activate vllm_env
(2)安装vllm包
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple
(3)安装modelscope包
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
(4)下载训练好的基座大模型文件或者微调后的模型文件
这里以阿里的通义千问qwen2.0模型为例,执行下面代码会自动下载模型文件到本地。
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen2-7B-Instruct')
下载的qwen2模型文件在系统的下面位置,就当前的home目录下,我的用户名是lyp,每个人有所不同。.cache 是隐藏目录,需要ls -A命令可以显示所有文件和目录
/home/lyp/.cache/modelscope/hub/Qwen
为了下面操作方面,比如可以拷贝到自己指定目录:
/home/lyp/qwen2_0/models/Qwen/
(5)启动vLLM大模型在线服务
命令进入大模型文件所在目录,这里在终端输入,注意控制台需要在vllm_env的虚拟环境下操作。
conda activate vllm_env
cd /home/lyp/qwen2_0/models/Qwen/
python -m vllm.entrypoints.openai.api_server --model Qwen2-7B-Instruct
注意Qwen2-7B-Instruct是/home/lyp/qwen2_0/models/Qwen/目录下,当前大模型所在目录的名字。所以命令的执行和Qwen2-7B-Instruct目录同一个层级即可。
缺省host的名字是None,port端口号是8000,可以通过参数—host和--port指定名字和端口。
(6)使用客户端代码调用在线大模型服务
我的测试,服务端地址:10.26.23.211,笔记本客户端地址:10.28.32.248,在同一个局域网内。测试代码在笔记本电脑位置:D:\lyp\code\llm_lesson\call_vllm,使用vscode+Anaconda编码。客户端python虚拟环境名llm_lesson_env1,版本3.10.14.
需要在虚拟环境下安装,openai包。
pip install openai -i
https://pypi.tuna.tsinghua.edu.cn/simple
方式1:openai API接口方式直接调用(简单高效)
核心代码讲解:
client = OpenAI(
base_url = "http://10.26.23.211:8000/v1",
api_key="EMPTY"
)
completion = client.chat.completions.create(
model="Qwen2-7B-Instruct",
messages=[
{"role": "system", "content": "你是一个金牌导游。"},
{"role": "user", "content": "给出宁波旅游攻略"}
]
)
# 也可以直接这样
messages=[
{"role": "user", "content": "你是一个金牌导游, 给出宁波旅游攻略"}
]
print(completion.choices[0].message.content)
部分结果内容展示:
方式2:langchain框架进行调用(可以更好进行结构化的处理)
安装langchain包
pip install langchain -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install langchain_openai -i https://pypi.tuna.tsinghua.edu.cn/simple
核心代码讲解:
test_str = "This is a beautiful world Привет, мир очень большой”"
#将英文和俄文分离开
res = test_langchain(test_str)
#进一步将json字符串解析为字典格式,方面后面操作
res = json_data_loads(res)
print(res)
def test_langchain(content: str):
structured_output_parser= StructuredOutputParser.from_response_schemas(
[
ResponseSchema(name="en", description="请将文本中的英文内容提取出来,并拼接成完整的语句", type="string"),
ResponseSchema(name="ru", description="请将文本中的俄文内容提取出来,并拼接成完整的语句", type="string")
]
)
# 获取解析器的输入模板
output_template= structured_output_parser.get_format_instructions()
# 确保PromptTemplate中使用了正确的输出格式指令
template = """
你是一个优秀的翻译大师!以下是我给你的文本内容:\n
{content} \n
输入的文本中包含英文和俄文,请将两种语言分离出来,并严格按照以下格式输出:{format_instructions}
"""
prompt = PromptTemplate(template=template, input_variables=["content"], partial_variables={"format_instructions": output_template})
client = OpenAI(
base_url = "http://10.26.23.211:8000/v1",
api_key="EMPTY"
)
response = client.chat.completions.create(
model="Qwen2-7B-Instruct",
messages=[{"role": "user",
"content":prompt.format(content=content)}])
response = response.choices[0].message.content
return response
格式化的字典格式输出结果,方便程序的进一步处理。
{'en': 'This is a beautiful world', 'ru': 'Привет, мир очень большой'}
机器学习原理与实践
https://www.bilibili.com/cheese/play/ss27274
优质课程,试听课一定听听,100%好评至今。
C++OpenCV计算机视觉入门精通与项目实践
https://www.bilibili.com/cheese/play/ss14962
优质课程,试听课一定听听,100%好评至今。