当前位置:   article > 正文

本地部署大模型服务全攻略:从零到一的实战教程_libnccl.so.2.18.1

libnccl.so.2.18.1

本文介绍在本地环境部署大模型服务的过程,主要介绍依赖的安装、大模型服务的部署、基于gradio的可视化demo。

上图是本文相关的技术内容,可以通过一段话的总结来理解它们的关系:使用了一张RTX3090的显卡,有24GB显存,使用的大模型是Qwen1.5-14B-Chat-GPTQ-Int4,在部署上使用了vllm提升大模型的性能,使用fschat将大模型部署成服务,并基于gradio创建了一个可视化的聊天窗口。

关于环境

大模型服务主要依赖于GPU资源,这次的实验是在一个虚拟机上完成的,分配了一张RTX3090卡,有24G显存,大模型服务启动之后,显存使用在20GB左右。

关于大模型

本次使用的大模型是Qwen1.5-14B-Chat-GPTQ-Int4,这里借用Kimi对这个大模型的名字进行解释:

Qwen1.5-14B-Chat-GPTQ-Int4:这个名称可能表示一个名为Qwen的模型,版本为1.5,具有140亿参数,主要用于聊天应用,采用了GPT架构的某种变种,并使用了4字节整数的数据类型。

Kimi

具体可查看:https://kimi.moonshot.cn/share/cp269sivk6g8dhe16o3g

关于大模型的估算问题

按照我的理解,大模型因为其参数庞大所以需要占用很多的显存。比如大模型动辄上百亿的参数,假如使用16位浮点数存储这些参数值,则大致需要的显存有:

所以,在FP16的精度下,一个10B参数规模的大模型,大概需要20GB的显存。

大模型经过量化之后可以显著降低资源开销,比如Int4量化即使用4bit来存储一个参数,与原来16bit的存储精度相比减少到1/4的资源开销,则10B参数规模的大模型只需要5GB的显存。但是出于某些原因,并无法达成这么协调的换算,根据经验所需要的显存大概缩减到1/3左右。所以一个10B参数规模的Int4量化版本,大概需要的显存是:

这里的某些原因,有一些合理的说法,比如大模型的资源占用不只是用来存参数,其他的开销可能没有通过量化技术得到缩减。

根据上述信息,我所使用的Qwen1.5-14B-Chat-GPTQ-Int4估算应该占用的显存是:

关于大模型量化技术的讨论,可以参考:https://kimi.moonshot.cn/share/cp26kssubms6ha9a3cjg

关于大模型的推理速度

直接加载大模型并部署服务,其性能低的可怜,具体表现在一次请求的答案生成过程很慢,以及多个并发请求需要排队时间较长才能得到结果。

当然我们可以通过堆GPU服务器,部署更多的大模型服务实例来提高其吞吐率,但是鉴于GPU资源的价格昂贵,而大模型对GPU资源的需求较高,更合理的想法是从技术上找提高性能的方案。

比如在实践经验中验证,使用vllm [https://github.com/vllm-project/vllm] 可以将生成速率提高34倍,吞吐率提高45倍,将GPU资源使用率从50%提升到90%左右。这表示它需要使用更多的GPU,但确实带来了很高的回报。

安装依赖

按需安装下面的依赖:

root@train-autogen-0:~# history``pip install transformers``pip install accelerate``pip install optimum``pip install auto-gptq``pip install vllm``pip install fschat``pip install gradio
  • 1

安装过程中遇到的问题

安装vllm过程遇到的错误:

使用Kimi进行分析:https://kimi.moonshot.cn/share/cour4rgnsmmsr9ubddqg

最后通过手动下载nccl并放置到错误信息中提到的目录,且进行了重命名:

mv /root/.config/vllm/nccl/cu12/cu12-libnccl.so.2.18.1 \``/root/.config/vllm/nccl/cu12/libnccl.so.2.18.1
  • 1

启动服务

分别启动controller、worker、api服务。

nohup python -u -m fastchat.serve.controller --host='0.0.0.0' \``--port=21001 > ./logs/fastchat_serve_controller.log 2>&1 &``echo 'start controller'``   ``nohup python -m fastchat.serve.vllm_worker --model-path \``~/LLM/Qwen1.5-14B-Chat-GPTQ-Int4 \``--controller-address http://0.0.0.0:21001 \``--port 19000 --host 0.0.0.0 --num-gpus 1 \``--worker-address http://0.0.0.0:19000 \``--gpu-memory-utilization 0.8 --max-model-len 5696 \``--trust-remote-code  \``> ./logs/Qwen1.5-14B-Chat-GPTQ-Int4.log 2>&1 &``echo 'start worker'``   ``nohup python -u -m fastchat.serve.openai_api_server \``--host 0.0.0.0 --port 7777 \``--controller-address http://0.0.0.0:21001 \``> ./logs/fastchat_api.log 2>&1 &``echo 'start api'
  • 1

启动gradio:

nohup python ./gradio_app.py > ./logs/gradio_app.log 2>&1 &
  • 1

上述脚本内容已经过完善。

启动服务过程中遇到的问题

启动vllm_worker报错:

2024-05-10 11:45:41 | ERROR | stderr | [rank0]:`     `raise ValueError(``2024-05-10 11:45:41 | ERROR | stderr | [rank0]: ``     ValueError: The model's max seq len (32768) is larger than  ``    the maximum number of tokens that can be stored in KV cache`     ``(5696). Try increasing `gpu_memory_utilization` or````decreasing `max_model_len` when initializing the engine.`
  • 1

修改指令,添加参数控制:

--max-model-len 5696
  • 1

这个设置可能会影响到大模型的性能,但是目前我的主要目标是跑通整个流程,所以也就暂时这样了。后面真正落地应用,还需要考虑效果、算力资源、性能等更多因素来给一个综合的设置方案。

Kimi对于该问题的分析:https://kimi.moonshot.cn/share/cour5ui2jko0hi3eb4h0

使用gradio构建聊天窗口

效果:

脚本:

from openai import OpenAI``client = OpenAI(`    `api_key="Qwen1.5-14B-Chat-GPTQ-Int4", # 不能不设置,也不能为空`    `base_url="http://127.0.0.1:7777/v1" # 注意,这里是base_url,不是具体chat接口的地址``)``   ``system_prompt = "你是 Qwen1.5, Qwen1.5 is the beta version of Qwen2, a transformer-based decoder-only language model pretrained on a large amount of data. 你擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。"``   ``def predict(message, history):`    `history_openai_format = [`        `{"role": "system", "content": system_prompt}`    `]`    `for human, assistant in history:`        `history_openai_format.append({"role": "user", "content": human })`        `history_openai_format.append({"role": "assistant", "content":assistant})`    `history_openai_format.append({"role": "user", "content": message})``   `    `response = client.chat.completions.create(`        `model="Qwen1.5-14B-Chat-GPTQ-Int4",`        `messages=history_openai_format,`        `temperature=0.3)``   `    `return response.choices[0].message.content``   ``   ``import gradio as gr``   ``gr.ChatInterface(predict, chatbot=gr.Chatbot(height=700)).launch(server_name='0.0.0.0', server_port=9999)
  • 1

过程中遇到的问题

gradio错误信息无法查看

我原本使用脚本启动app,并在后台执行:

nohup python gradio_app.py > /data1/logs/gradio_app.log 2>&1 &
  • 1

但是程序报错,且无法看到错误信息。后来我直接把代码放到Jupyter上运行,就可以看到了。暂时没有继续深究里面的原因。

使用openai的client api时遇到的各种错误

在这个过程中出现的错误主要有三个:

  • api_key 没有设置,或者设置的内容是空

  • base_url 填写了chat接口的完整地址,如 `http://127.0.0.1:7777/v1/chat/completions`

  • 使用了流式的请求,但当前的服务部署模式可能还不支持流式的

使用API调用大模型服务

下面是通过restful api调用大模型服务,但为了复用代码,模仿了gradio的history结构。

history = []``def chat(message):`    `response = predict(message, history)`    `item = message, response`    `history.append(item)`    `return response
  • 1

结果验证

通过日志确认相关服务已经启动:

验证API访问大模型服务:

验证可以通过gradio访问:

确认GPU资源使用情况:

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

四、AI大模型商业化落地方案

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/946422
推荐阅读
相关标签
  

闽ICP备14008679号