0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

搭建开源大语言模型服务的方法

新机器视觉 来源:Deephub Imba 2024-10-29 09:17 次阅读

来源:Deephub Imba

本文我们将总结5种搭建开源大语言模型服务的方法,每种都附带详细的操作步骤,以及各自的优缺点。

在不断发展的大型语言模型(LLMs)领域中,用于支持这些模型的工具和技术正以与模型本身一样快的速度进步。在这篇文章中,我们将总结5种搭建开源大语言模型服务的方法,每种都附带详细的操作步骤,以及各自的优缺点。

1、Anaconda + CPU

我们首先介绍门槛最低的入门级方法,因为这个方法不需要GPU,基本上只要有一个还不错的CPU和足够RAM就可以运行。

这里我们使用llama.cpp及其python绑定llama-cpp-python

 pip install llama-cpp-python[server]   --extra-index-url https://abetlen.github.io/llama-
 cpp-python/whl/cpu

创建一个名为models/7B的目录来存储下载的模型。然后使用命令下载GGUF格式的量化模型:

 mkdir -p models/7B wget -O models/7B/llama-2-7b-chat.Q5_K_M.gguf
 https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q5_K_M.gguf?download=true

然后就可以运行以下命令启动服务器:

python3-mllama_cpp.server--modelmodels/7B/llama-2-7b-chat.Q5_K_M.gguf
将环境变量MODEL设置为下载模型的路径。然后运行openai_client.py脚本就可以访问我们的查询服务器。openai_client.py使用OpenAI库调用LLM服务器并打印响应。

 messages=[    {"role": "system", "content": "You are a helpful assistant."},    {        "role": "user",        "content": "What are the names of the four main characters of South Park?",    }, ]

因为这个方法是门槛最低的,所以他的速度也是最慢的,基于IntelCorei9-10900F CPU @ 2.80GHz的系统的处理时间大概是13秒左右,所以这个方法一般用作我们的本地测试服务(如果你GPU不够的话)。

2、Anaconda + GPU

前面的CPU方法是非常慢的,为了加快速度我们将使用vllm,这是一个专门为有效利用gpu而设计的工具。

pipinstallvllm

执行以下命令来启动服务器:‍


python-mvllm.entrypoints.openai.api_server--modelTheBloke/Llama-2-7B-Chat-AWQ--api-keyDEFAULT--quantizationawq--enforce-eager

这将下载AWK量化模型并启动一个OpenAI兼容服务器,我们可以像使用llama.cpp一样进行查询。

“— enforce-eager”是费差个重要的,因为它允许模型在我的10G VRAM GPU中运行,没有内存不足的错误。

在Nvidia RTX 3080 GPU和IntelCorei9-10900F CPU的系统下处理时间只有0.79s。CPU快20倍左右,这就是为什么GPU现在都那么贵的一个原因。

这种方式可以用做我们测试服务器或者在线上的小规模部署,如果要求不高,也可以当作生产环境来使用,当然维护起来非常麻烦。

3、Docker + GPU

vllm有很多依赖,如果要批量的安装是一件非常耗时的事情。好在vllm还提供了一个预构建的docker映像,它已经包含了所需的所有库。

对于ubuntu,我们首先安装Nvidia CUDA Toolkit,如果安装了则跳过


sudoaptinstallnvidia-cuda-toolkit
然后添加Nvidia Docker存储库并安装Nvidia Container Toolkit:


distribution=$(./etc/os-release;echo$ID$VERSION_ID)curl-s-Lhttps://nvidia.github.io/nvidia-docker/gpgkey|sudoapt-keyadd-curl-s-Lhttps://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list|sudotee/etc/apt/sources.list.d/nvidia-docker.listsudoapt-getupdate&&sudoapt-getinstall-ynvidia-container-toolkitsudosystemctlrestartdocker

配置Docker使用Nvidia runtime: 
sudotee/etc/docker/daemon.json<

然后就可以运行我们的模型了:


dockerrun--runtimenvidia--gpusall-v~/.cache/huggingface:/root/.cache/huggingface-p8000:8000--ipc=hostvllm/vllm-openai:latest--modelTheBloke/Llama-2-7B-Chat-AWQ--quantizationawq--enforce-eager

这里我们使用-v参数将本地的磁盘映射到容器中,这样所有的容器都可以使用huggingface的模型缓存,避免了重复下载。

docker的部署方式处理一个查询的时间在0.8s左右与使用相同硬件在Anaconda上运行vllm相似。

使用docker可以大大简化我们服务器的环境配置,配合集群管理脚本可以适用于大规模的服务部署。

上面的方式都适用于本地和有GPU主机/集群的方式,下面我们介绍2个比较简单的云GPU的方案,这两个方案都是按需付费的。

4、modal

Modal可以简化无服务器应用程序的部署,特别是那些利用GPU资源的应用程序。它的一个突出的特点是它的计费模式,它确保用户只在他们的应用程序使用GPU资源的持续时间内收费。这意味着当你的应用程序不被使用时则不会收费。

Modal还提供每月30美元的优惠,为用户提供了充分的机会来探索和试验部署gpu加速的应用程序,而无需支付前期费用,这也是我们介绍他的一个原因,因为每月目前还能白嫖30美元哈。

首先安装:

pipinstallmodal


然后配置modal的运行环境,这一步需要登陆了


modalsetup

我们这里的vllm_modal_deploy.py改编Modal的官方教程。这个脚本最重要的一点是定义GPU。这里我选择了nvidia T4,因为量化模型非常小:

 # https://modal.com/docs/examples/vllm_mixtral import os import time  from modal import Image, Stub, enter, exit, gpu, method  APP_NAME = "example-vllm-llama-chat" MODEL_DIR = "/model" BASE_MODEL = "TheBloke/Llama-2-7B-Chat-AWQ" GPU_CONFIG = gpu.T4(count=1)
然后定义运行代码的docker镜像:‍


 vllm_image = ( # https://modal.com/docs/examples/vllm_mixtral    Image.from_registry("nvidia/cuda:12.1.1-devel-ubuntu22.04", add_python="3.10")    .pip_install(        "vllm==0.3.2",        "huggingface_hub==0.19.4",        "hf-transfer==0.1.4",        "torch==2.1.2",    )    .env({"HF_HUB_ENABLE_HF_TRANSFER": "1"})    .run_function(download_model_to_folder, timeout=60 * 20) )
定义App:
 stub = Stub(APP_NAME)

  最后编写预测的类:‍ 


classModel:@enter()#Lifecyclefunctionsdefstart_engine(self):importtimefromvllm.engine.arg_utilsimportAsyncEngineArgsfromvllm.engine.async_llm_engineimportAsyncLLMEngineprint("coldstartinginference")start=time.monotonic_ns()engine_args=AsyncEngineArgs(model=MODEL_DIR,tensor_parallel_size=GPU_CONFIG.count,gpu_memory_utilization=0.90,enforce_eager=False,#capturethegraphforfasterinference,butslowercoldstartsdisable_log_stats=True,#disableloggingsowecanstreamtokens

@enter()装饰器被用来定义生命周期方法来处理代码的初始化之类的事情。所以我们在这里加载模型并设置生成管道。如果查询触发了此方法,则意味着有一个“冷启动”,也就是第一次启动的耗时会比较长。  定义生成函数: 


@stub.function()defgenerate(user_question:str):model=Model()print("Sendingnewrequest:",user_question,"

")result=""fortextinmodel.completion_stream.remote_gen(user_question):print(text,end="",flush=True)result+=textreturnresult

最后就是使用命令行进行部署 


modaldeployvllm_modal_deploy.py
部署完成后就可以从python调用这个函数:‍


importtimeitimportmodalAPP_NAME="example-vllm-llama-chat"f=modal.Function.lookup(APP_NAME,"generate")start_time=timeit.default_timer()print(f.remote("WhatarethenamesofthefourmaincharactersofSouthpark?"))elapsed=timeit.default_timer()-start_timeprint(f"{elapsed=}")


经过我的测试第一次启动大约需要37秒。这包括启动时间和处理时间。应用程序已经启动时的延迟是2.8秒。这些都是在Nvidia T4上运行的,所以3秒还是可以接受的。

需要注意:container_idle_timeout的值是用来回收容器的,超过了这个时间值会进行回收,这样再次启动就会调用初始化的过程,也就是我们说的冷启动。但是因为modal的计费方式,再未回收前都是计费的,所以请谨慎修改。

最后说下费用:Modal的Nvidia T4收费是0.000164 * /秒 或 0.59 * /小时。上面我们使用了几百秒的计算时间,花费了大约0.1美元。

5、AnyScale

Anyscale与Modal类似,但他更专注于提供随时可用的开源模型。我们可以使用Anyscale API的URL直接调用它们。

首先注册并获得API密钥。你可以使用他们提供给新用户的10*$免费套餐来运行本教程。

接下来,我们将使用与之前相同的openai_client.py脚本:



exportAPI_KEY="CHANGEME"exportMODEL="meta-llama/Llama-2-7b-chat-hf"exportBASE_URL="https://api.endpoints.anyscale.com/v1"pythonopenai_client.py

不需要任何的设置,只要我们在发送请求时修改参数就可以访问不同的模型了,这就是Anyscale的优势

这个请求的延迟大约是3.7秒,还算不错。但是AnyScale是按照令牌来计费的(与OpenAI的API相同)LLama2 7B 的价格是0.15*$ / 1M 令牌。我们运行这个示例花费不到1/10美分。

可以看到AnyScale还是很不错的,对于开源模型我们直接可以拿来使用,并且花费也很低,如果你没有GPU,这个可以作为模型测试的首选平台,一个月几十美元基本上够我们测试当月新发布的所有模型了。

总结

当涉及到服务大型语言模型(llm)时,有各种各样的方法可以选择:

对喜欢本地服务器设置的人来说,使用带有CPU的Anaconda提供了较低的进入门槛,gpu加速的Anaconda环境可以缓解延迟问题,但它仍然面临可伸缩性和对本地资源的依赖方面的限制,特别是在处理大型llm时。

Docker可以简化Python环境配置,可以适应大批量的部署。

Modal提供了一种更灵活的按次付费计算解决方案,使其具有成本效益和易于设置的吸引力。

AnyScale提供了较低的进入门槛对于那些追求简单的人来说是一个非常好的选择。

我们介绍的这些方法是一个很好的起点,还有很多其他服务比如runpod和AWS,但这些方法需要更多的运维知识,并且在小规模部署上优势并不明显,所以要考虑对针对特定需求和要求量身定制的最佳方案还需要进行全面评估。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10790

    浏览量

    210627
  • 服务器
    +关注

    关注

    12

    文章

    8911

    浏览量

    85013
  • 开源
    +关注

    关注

    3

    文章

    3206

    浏览量

    42273
  • 模型
    +关注

    关注

    1

    文章

    3093

    浏览量

    48612

原文标题:5种搭建LLM服务的方法和代码示例

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【大语言模型:原理与工程实践】揭开大语言模型的面纱

    获得良好效果。 语言模型作为自然语言处理的核心,不断进化以捕捉人类语言的精髓。起初,这些模型依赖于统计
    发表于 05-04 23:55

    【大语言模型:原理与工程实践】大语言模型的基础技术

    的特征,并且这些特征融合了这些词在当前序列的上下文语义,因此能够解决一词多义的问题。凭借这种优势,基于动态词向量语言模型进行预训练的方法被广泛应用于自然语言处理任务中。 经典结构
    发表于 05-05 12:17

    【大语言模型:原理与工程实践】大语言模型的评测

    评测任务则重点评估模型在提供方法论和实践建议方面的能力。这类任务要求模型能像经验丰富的导师或专家那样,为用户提供有价值的建议和解决方案。总之,这套综合性的评测框架为全面评估大语言
    发表于 05-07 17:12

    【大语言模型:原理与工程实践】大语言模型的应用

    相关的文档片段,将这些文档与用户问题结合成提示词,再输入给大语言模型。这种方法为大语言模型提供了问题背景知识,有效减少了“幻觉”现象的出现。
    发表于 05-07 17:21

    自然语言处理常用模型解析

    自然语言处理常用模型使用方法一、N元模型二、马尔可夫模型以及隐马尔可夫模型及目前常用的自然
    发表于 12-28 15:42 5794次阅读
    自然<b class='flag-5'>语言</b>处理常用<b class='flag-5'>模型</b>解析

    使用开源CMS系统所搭建的网站安全吗

    越来越多的用户和建站公司选用开源CMS搭建网站,因为无论开发人员是使用PHP、JSP还是其他开发语言,均能找到对应语言开发的成熟开源建站系统
    发表于 08-29 17:36 1450次阅读

    NVIDIA NeMo最新语言模型服务帮助开发者定制大规模语言模型

    NVIDIA NeMo 大型语言模型(LLM)服务帮助开发者定制大规模语言模型;NVIDIA BioNeMo
    发表于 09-22 10:42 887次阅读

    支持Python和Java的BigCode开源轻量级语言模型

    BigCode 是一个开放的科学合作组织,致力于开发大型语言模型。近日他们开源了一个名为 SantaCoder 的语言模型,该
    的头像 发表于 01-17 14:29 898次阅读

    虹科分享 | 谷歌Vertex AI平台使用Redis搭建语言模型

    基础模型和高性能数据层这两个基本组件始终是创建高效、可扩展语言模型应用的关键,利用Redis搭建语言
    的头像 发表于 09-18 11:26 584次阅读
    虹科分享 | 谷歌Vertex AI平台使用Redis<b class='flag-5'>搭建</b>大<b class='flag-5'>语言</b><b class='flag-5'>模型</b>

    机器人基于开源的多模态语言视觉大模型

    ByteDance Research 基于开源的多模态语言视觉大模型 OpenFlamingo 开发了开源、易用的 RoboFlamingo 机器人操作
    发表于 01-19 11:43 340次阅读
    机器人基于<b class='flag-5'>开源</b>的多模态<b class='flag-5'>语言</b>视觉大<b class='flag-5'>模型</b>

    字节发布机器人领域首个开源视觉-语言操作大模型,激发开源VLMs更大潜能

    对此,ByteDance Research 基于开源的多模态语言视觉大模型 OpenFlamingo 开发了开源、易用的 RoboFlamingo 机器人操作
    的头像 发表于 01-23 16:02 452次阅读
    字节发布机器人领域首个<b class='flag-5'>开源</b>视觉-<b class='flag-5'>语言</b>操作大<b class='flag-5'>模型</b>,激发<b class='flag-5'>开源</b>VLMs更大潜能

    模型开源开放评测体系司南正式发布

    近日,大模型开源开放评测体系司南(OpenCompass2.0)正式发布,旨在为大语言模型、多模态模型等各类
    的头像 发表于 02-05 11:28 965次阅读

    NVIDIA加速微软最新的Phi-3 Mini开源语言模型

    NVIDIA 宣布使用 NVIDIA TensorRT-LLM 加速微软最新的 Phi-3 Mini 开源语言模型。TensorRT-LLM 是一个开源库,用于优化从 PC 到云端的 NVIDIA GPU 上运行的大
    的头像 发表于 04-28 10:36 450次阅读

    使用PyTorch搭建Transformer模型

    Transformer模型自其问世以来,在自然语言处理(NLP)领域取得了巨大的成功,并成为了许多先进模型(如BERT、GPT等)的基础。本文将深入解读如何使用PyTorch框架搭建T
    的头像 发表于 07-02 11:41 1356次阅读

    开放原子开源大赛助力轻量级大语言模型应用落地

    “Intel借助开源大赛在全国的影响力,吸引更多开发者加入大语言模型及其在人工智能领域的创新应用。”负责BigDL-LLM赛题运营的Intel工作人员表示。
    的头像 发表于 09-24 10:38 429次阅读