使用VLLM库轻松调用大型模型实战指南

使用 vllm 库调用大模型,这里调用的是通义千问,那需要先下载:

通义千问-14B-Chat

vllm 这个库目前只能在 linux 上用, win 是用不了的,pip 安装不了,这里弄了一个调用示例代码

from vllm import LLM, SamplingParams
from transformers import AutoModelForCausalLM, AutoTokenizer
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'  # 设置使用第一块 gpu
model_path = ''
# tokenizer_mode='slow'表示使用慢速但更精确的tokenizer模式。
# tensor_parallel_size=2,表明在多GPU环境下进行张量并行计算的大小
# trust_remote_code=True,信任远程代码执行(根据具体库实现可能与安全性相关)
model = LLM(modle=model_path, tokenizer=model_path, tokenizer_mode='slow', tensor_parallel_size=2,
            trust_remote_code=True)

''''
pad_token='<|extra_0|>':

指定了填充token,当需要对输入序列进行填充以保持固定长度时,会用到这个token。在处理批次数据时,通常需要所有序列具有相同的长度,较短的序列会在指定侧(这里是左侧)使用填充token进行填充。
eos_token='':

终止符(End of Sequence),表示序列的结束。在自回归语言模型中,它有时用来标记文本块的结尾。当模型生成文本时,遇到此标记可能会停止生成新的tokens。
padding_side='left':

指定在哪个侧面对序列进行填充。在这里是“left”,意味着在每个样本的左侧添加填充token,直到所有样本达到batch中最长样本的长度。
trust_remote_code=True:

这个参数允许从远程位置(如Hugging Face Model Hub)加载tokenizer时信任远程代码。这主要是为了安全和执行远程代码而设置的一个选项,确保在加载预训练模型tokenizer时能够顺利运行来自可信源的代码。
'''
tokenizer = AutoTokenizer.from_pretrained(
    model_path,
    pad_token='<|extra_0|>',  # 设置填充token
    eos_token='<|endoftext|>',
    padding_side='left',  # 在序列左侧进行填充
    trust_remote_code=True  #
)

# temperature 调节生成样本的随机性,默认情况下温度越高,生成结果越多样;温度越低,生成结果越接近训练数据的概率分布。一般 0-1 ,超过1模型说的话不太可用
# stop=['', '<|im_start|>', '']:当生成的序列包含这些终止符时,停止生成
# max_tokens=1000:限制生成的最大token数量
sampling_params = SamplingParams(
    temperature=0.9,
    stop=['<|im_end|>','<|im_start|>', '<|endoftext|>'], 
    max_tokens=1000)

'''
<'|im_start|'>' 和 '<'|endoftext|'>' 是预定义的特殊标记,分别表示一个新对话的开始和文本块的结束。当模型在生成过程中遇到这些标记时,
它会知道当前输入已经完成
因为调用模型是一批一批的,存入列表中去调用的,肯呢个 vllm 内部会吧列表的东西合起来,这样就需要加入结束符来区别每次的输入
'''
prompt_before = '<|im_start|>system\n你是自然语言处理专家<|im_end|>\n<|im_start|>user\n'
prompt_after = '<|im_end|>\n<|im_start|>assistant\n'

message = f'''你好,你是谁?'''
batch_prompts = []
cur_prompts = prompt_before + message + prompt_after
batch_prompts.append(message)
outputs = model.generate(batch_prompts, sampling_params)
for output in outputs:
    generated_text = output.outputs[0].text
    print(generated_text)







from vllm import LLM, SamplingParams
import os

os.environ['CUDA_VISIBLE_DEVICES'] = '0'
prompts = [
    "Hello, my name is",
    "The president of the United States is",
    "The capital of France is",
    "The future of AI is",
]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)

model_path = "/root/autodl-tmp"
llm = LLM(model=model_path, trust_remote_code=True, tokenizer=model_path, tokenizer_mode='slow', tensor_parallel_size=1)
outputs = llm.generate(prompts, sampling_params)

# Print the outputs.
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值