魔搭牵手vLLM,提供更快更高效LLM推理服务

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 今年六月,来自加州大学伯克利分校、斯坦福大学、加州大学圣迭戈分校的研究人员基于操作系统中经典的虚拟内存和分页技术,提出了一个新的注意力算法PagedAttention,并打造了一个LLM服务系统vLLM。

导言

今年六月,来自加州大学伯克利分校、斯坦福大学、加州大学圣迭戈分校的研究人员基于操作系统中经典的虚拟内存和分页技术,提出了一个新的注意力算法PagedAttention,并打造了一个LLM服务系统vLLM。


论文链接:

https://arxiv.org/pdf/2309.06180.pdf


Github开源链接:

https://github.com/vllm-project/vllm


vLLM在KV缓存上实现了几乎零浪费,并且可以在「请求内部」和「请求之间」灵活共享KV高速缓存,进一步减少了内存的使用量。


近期,魔搭社区和vLLM合作,一起为中国开发者提供更快更高效的LLM推理服务,基于vLLM,开发者可以实现针对魔搭社区的大语言模型,快速对数据集进行离线批量推理,构建API服务器,启动兼容 OpenAI 的 API 服务器等。


魔搭社区最新的镜像已经支持预装vLLM,魔搭官方镜像环境:

registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda11.8.0-py310-torch2.1.0-tf2.14.0-1.9.5


最新镜像也将尽快上架到魔搭免费算力镜像列表。


魔搭社区支持的模型列表:

模型结构

模型名称

实际的模型id样例

AquilaForCausalLM

Aquila

BAAI/AquilaChat2-34B, BAAI/Aquila2-34B, etc.

BaiChuanForCausalLM

Baichuan

baichuan-inc/Baichuan2-7B-Base, baichuan-inc/Baichuan2-13B-Base, etc.

ChatGLMModel

ChatGLM

ZhipuAI/chatglm2-6b, ZhipuAI/chatglm3-6b, etc.

InternLMForCausalLM

InternLM

internlm/internlm-7b, internlm/internlm-chat-7b, etc.

QWenLMHeadModel

Qwen

qwen/Qwen-7B, qwen/Qwen-7B-Chat, etc.

LlamaForCausalLM

LLaMa

modelscope/Llama-2-7b-ms,modelscope/Llama-2-13b-ms

modelscope/Llama-2-70b-ms,

etc.

YiForCausalLM

Yi

01ai/Yi-6B, 01ai/Yi-34B, etc.


魔搭社区最佳实践


在vLLM上使用魔搭的模型只需要在任何vLLM命令之前设置一个环境变量:

export VLLM_USE_MODELSCOPE=True

之后在需要填入模型id的地方使用魔搭的模型id即可。下面我们给出几个代码范例,来展示在vLLM上如何快速地加载魔搭模型进行推理。


离线批量推理

我们首先展示一个使用 vLLM 对数据集进行离线批量推理的示例。

使用来自魔搭ModelScope社区的LLM基础模型


qwen/Qwen-7B

https://www.modelscope.cn/models/qwen/Qwen-7B/summary

from vllm import LLM, SamplingParams
import os
# 设置环境变量,从魔搭下载模型
os.environ['VLLM_USE_MODELSCOPE'] = 'True'
llm = LLM(model="qwen/Qwen-7B", revision="v1.1.8", trust_remote_code=True)
prompts = [
    "Hello, my name is",
    "today is a sunny day,",
    "The capital of France is",
    "The future of AI is",
]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95,stop=["<|endoftext|>"])
outputs = llm.generate(prompts, sampling_params,)
# print the output
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")


使用来自魔搭ModelScope社区的LLM对话模型(支持单轮和多轮)


ChatGLM3-6b-32k

https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b-32k/summary

from vllm import LLM, SamplingParams
import os
from modelscope import AutoTokenizer
from copy import deepcopy
# 设置环境变量,从魔搭下载模型
os.environ['VLLM_USE_MODELSCOPE'] = 'True'
def process_response(output, history):
    # Code borrowed from ChatGLM3-6b-32k
    content = ""
    history = deepcopy(history)
    for response in output.split("<|assistant|>"):
        metadata, content = response.split("\n", maxsplit=1)
        if not metadata.strip():
            content = content.strip()
            history.append({"role": "assistant", "metadata": metadata, "content": content})
            content = content.replace("[[训练时间]]", "2023年")
        else:
            history.append({"role": "assistant", "metadata": metadata, "content": content})
            if history[0]["role"] == "system" and "tools" in history[0]:
                content = "\n".join(content.split("\n")[1:-1])
                def tool_call(**kwargs):
                    return kwargs
                parameters = eval(content)
                content = {"name": metadata.strip(), "parameters": parameters}
            else:
                content = {"name": metadata.strip(), "content": content}
    return content, history
llm = LLM(model="ZhipuAI/chatglm3-6b-32k", revision="v1.0.1", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("ZhipuAI/chatglm3-6b-32k", trust_remote_code=True)
prompts = [
    "Hello, my name is Alia",
    "Today is a sunny day,",
    "The capital of France is",
    "Introduce YaoMing to me.",
]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=128,
                        stop=[tokenizer.eos_token, "<|user|>", "<|observation|>"])
inputs = []
for prompt in prompts:
    # build chat input according to the prompt and history
    inputs.append(tokenizer.build_chat_input(prompt, [])['input_ids'].numpy()[0].tolist())
# call with prompt_token_ids, which has template information
outputs = llm.generate(prompt_token_ids=inputs, sampling_params=sampling_params,)
histories = []
for prompt, output in zip(prompts, outputs):
    history = []
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
    history.append({"role": 'user', "content": prompt})
    generated_text, history = process_response(generated_text, history)
    histories.append(history)
prompts_new = [
    'What is my name again?',
    'What is the weather I just said today?',
    'What is the city you mentioned just now?',
    'How tall is him?'
]
inputs = []
for prompt, history in zip(prompts_new, histories):
    inputs.append(tokenizer.build_chat_input(prompt, history)['input_ids'].numpy()[0].tolist())
outputs = llm.generate(prompt_token_ids=inputs, sampling_params=sampling_params,)
# print the output
for prompt, output in zip(prompts_new, outputs):
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")


4条prompt推理时间低于1秒:


多轮对话的效果也很流畅:


API服务器

vLLM 可以部署为 LLM 服务。服务器使用AsyncLLMEngine类来支持传入请求的异步处理。


启动服务器:

VLLM_USE_MODELSCOPE=True python -m vllm.entrypoints.openai.api_server \
--model="qwen/Qwen-7B-Chat" --revision="v1.1.8" --trust-remote-code


在shell中查询模型:

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen/Qwen-7B-Chat",
"prompt": "San Francisco is a",
"max_tokens": 7,
"temperature": 0
}'
# Response:
# {"id":"cmpl-2a54b777c8714388806a53e7c00daf1d","object":"text_completion","created":1127948,"model":"qwen/Qwen-7B-Chat","choices":[{"index":0,"text":" city in California, United States.","logprobs":null,"finish_reason":"length"}],"usage":{"prompt_tokens":4,"total_tokens":11,"completion_tokens":7}}


有关使用vLLM+ModelScope的更多方法,请查看vLLM的官方快速入门指南:

https://vllm.readthedocs.io/en/latest/getting_started/quickstart.html


点击直达链接

https://docs.vllm.ai/en/latest/getting_started/quickstart.html

相关文章
|
3月前
|
机器学习/深度学习 自然语言处理 测试技术
CoT神话破灭,并非LLM标配!三大学府机构联手证实,CoT仅在数学符号推理有用
【10月更文挑战第17天】链式思维(CoT)曾被认为是大型语言模型(LLM)激发推理能力的关键方法,但最新研究显示,CoT仅在数学和符号推理任务中有效,其他任务中效果不明显。加州大学伯克利分校、斯坦福大学和卡内基梅隆大学的联合研究打破了CoT作为LLM标配的神话,为重新评估LLM的推理能力提供了新视角。
54 1
|
14天前
|
JSON 人工智能 算法
探索大型语言模型LLM推理全阶段的JSON格式输出限制方法
本篇文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
|
1月前
|
机器学习/深度学习 存储 缓存
ORCA:基于持续批处理的LLM推理性能优化技术详解
大语言模型(LLMs)的批处理优化面临诸多挑战,尤其是由于推理过程的迭代性导致的资源利用不均问题。ORCA系统通过引入迭代级调度和选择性批处理技术,有效解决了这些问题,大幅提高了GPU资源利用率和系统吞吐量,相比FasterTransformer实现了最高37倍的性能提升。
129 26
|
1月前
|
缓存 算法 关系型数据库
MIT韩松团队长上下文LLM推理高效框架DuoAttention:单GPU实现330万Token上下文推理
麻省理工学院韩松团队提出DuoAttention框架,旨在提高大型语言模型(LLM)处理长上下文的效率。该框架通过区分检索头和流式头,仅对检索头应用全键值缓存,减少内存消耗和计算时间,同时保持模型长上下文处理能力。实验结果显示,DuoAttention在多种模型架构上显著提升了推理效率,为LLM的实际应用提供了新可能。
64 14
|
2月前
|
自然语言处理 算法
RAG真能提升LLM推理能力?人大最新研究:数据有噪声,RAG性能不升反降
随着大型语言模型(LLM)在自然语言处理领域的广泛应用,检索增强生成(RAG)技术因能引入新知识和减少幻觉而受到关注。然而,RAG对LLM推理能力的实际提升效果仍存争议。中国人民大学的一项研究表明,RAG虽能辅助LLM推理,但在处理含噪信息和深度推理时面临挑战。为此,研究团队提出了DPrompt tuning方法,旨在解决噪声问题并提升RAG性能。
57 12
|
1月前
|
缓存 自然语言处理 API
Ascend推理组件MindIE LLM
MindIE LLM是基于昇腾硬件的大语言模型推理组件,提供高性能的多并发请求调度与优化技术,如Continuous Batching、PageAttention等,支持Python和C++ API,适用于高效能推理需求。其架构包括深度定制优化的模型模块、文本生成器和任务调度管理器,支持多种模型框架和量化方式,旨在提升大规模语言模型的推理效率和性能。
|
1月前
|
自然语言处理 资源调度 并行计算
从本地部署到企业级服务:十种主流LLM推理框架的技术介绍与对比
本文深入探讨了十种主流的大语言模型(LLM)服务引擎和工具,涵盖从轻量级本地部署到高性能企业级解决方案,详细分析了它们的技术特点、优势及局限性,旨在为研究人员和工程团队提供适合不同应用场景的技术方案。内容涉及WebLLM、LM Studio、Ollama、vLLM、LightLLM、OpenLLM、HuggingFace TGI、GPT4ALL、llama.cpp及Triton Inference Server与TensorRT-LLM等。
154 7
|
2月前
|
人工智能 自然语言处理 测试技术
苹果一篇论文得罪大模型圈?Transformer不会推理,只是高级模式匹配器!所有LLM都判死刑
苹果公司发布论文《GSM-Symbolic: Understanding the Limitations of Mathematical Reasoning in Large Language Models》,质疑大型语言模型(LLM)在数学推理方面的能力。尽管LLM在GSM8K等测试中表现良好,但在新基准测试GSM-Symbolic中,其准确率随数值变化而显著下降,表明LLM可能依赖于记忆和模式匹配而非真正的数学理解。这一发现引发了AI领域的广泛讨论。
43 5
|
2月前
|
人工智能 自然语言处理
重要的事情说两遍!Prompt复读机,显著提高LLM推理能力
【10月更文挑战第30天】本文介绍了一种名为“问题重读”(Question Re-reading)的提示策略,旨在提高大型语言模型(LLMs)的推理能力。该策略受人类学习和问题解决过程的启发,通过重新审视输入提示中的问题信息,使LLMs能够提取更深层次的见解、识别复杂模式,并建立更细致的联系。实验结果显示,问题重读策略在多个推理任务上显著提升了模型性能。
69 2
|
2月前
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
226 12

热门文章

最新文章