vLLM部署本地大模型进行在线调用

vLLM部署本地大模型进行在线调用

1.如何加载调用本地下载的大模型文件?

这里指的是如何使用本地大模型的预测功能,在实际项目中模型并不是仅仅作为单机程序运行,而是作为具体业务系统的服务模块。因此需要提供相应API接口为应用程序提供服务。

所以就有两种方式,(1)使用代码(比如python或C++等语言)或平台/工具(Ollama等)直接调用本地模型文件,(2)将大模型文件部署到服务端,使用API接口的方式调用,就像我们在网上使用其他平台的对话大模型一样。显然,第二种方式是部署业务更需要的。

2.使用vLLM部署大模型

软件环境:Ubuntu 22.04下进行相应的环境配置和部署,具体看“Ubuntu 本地化部署与微调开源大模型”部分。下面链接:

使用阿里开源大模型通义千问Qwen进行推理-优快云博客

阿里开源大模型通义千问Qwen进行训练-优快云博客

安装使用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目录同一个层级即可。

670476ee3e7a47699d8b2ed4b044aca6.png

2e179d102d734f828f3cf8af031f2e79.png

缺省host的名字是Noneport端口号是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)

 

部分结果内容展示:

c6c3fdaa1a5b4551a3d98a270b32201e.png

 

方式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%好评至今。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值