前言
-
如何选择 GPU 和云服务厂商,追求最高性价比
-
如何部署自己 fine-tune 的模型,向业务提供高可用推理服务
-
如何控制内容安全,做好算法备案,确保合规
硬件选型
当我们为模型训练及推理做硬件选型时,NVIDIA 几乎是唯一选择。
这是一家全球知名的图形处理器(GPU)公司,成立于 1993 年。
因为在 GPU 领域,尤其 AI 领域芯片的垄断性优势,其创始人黄仁勋被坊间称为「黄教主」。
什么是 GPU?
Graphical Processing Units (GPUs)
-
图形处理单元(GPU)是一种功能强大的电子芯片,用于在沉浸式视频游戏、电影和其他视觉媒体中呈现丰富的 2D/3D 图形和动画
-
因其超越 CPU 的并行矩阵运算性能,所以也被广泛应用于人工智能相关的各种系统,包括机器视觉、NLP、语音识别、自动驾驶等
CUDA 核心和 Tensor 核心
CUDA 核心:
-
是 NVIDIA 开发的并行计算平台和编程模型,用于 GPU 上的通用计算,就像是万能工人,可以做很多不同的工作
-
适合游戏和图形渲染、天气预测、电影特效等场景
Tensor 核心:
-
中文叫:张量核心
-
专门设计用于深度学习中的矩阵运算,加速深度学习算法中的关键计算过程
-
适合语音助手、人脸识别等场景
案例 1:视频渲染 当一个电影制片公司决定制作一部具有高度视觉效果的 3D 电影时,他们需要大量的计算能力来渲染每一帧。这里,CUDA 核心非常有用,因为它们能够处理大量的细节,如光线追踪、纹理和阴影。例如,当一束光从一个光源反射到一个物体上,然后反射到摄像机上,CUDA 核心可以用来计算这个光线路径上的所有细节,确保最终的图像看起来真实并且美观。
案例 2:面部识别 安全系统、智能手机和许多应用程序现在都使用面部识别技术。这需要通过深度学习模型来识别人的面部特征。Tensor 核心在这里发挥关键作用,它们可以迅速地处理神经网络中的大量矩阵乘法和加法,确保面部识别既准确又快速。
AI 领域常用 GPU
这个表格依据价格进行排序,价格从低到高。
显卡 | 目标市场 | 性能 | 应用场景 | 价格 |
---|---|---|---|---|
T4 | 企业/AI 推理 | 适中 | AI 推理, 轻量级训练, 图形渲染 | 7999(14G) |
4090 | 消费者 | 非常高 | 通用计算, 图形渲染, 高端游戏, 4K/8K 视频编辑 | 14599(24G) |
A10 | 企业/图形 | 适中 | 图形渲染, 轻量级计算 | 18999(24G) |
A6000 | 企业/图形 | 适中 | 图形渲染, 轻量级计算 | 32999(48G) |
V100 | 数据中心/AI | 高 | 深度学习训练/推理, 高性能计算 | 42999(32G) |
A100 | 数据中心/AI | 高 | 深度学习训练/推理, 高性能计算 | 69999(40G) |
A800 | 数据中心/AI | 中等 | 深度学习推理, 高性能计算, 大数据分析 | 110000 |
H100 | 数据中心/AI | 高 | 深度学习训练/推理, 高性能计算, 大数据分析 | 242000 |
-
有些在京东就能买到:https://item.jd.com/10065826100148.html
-
美国商务部限制 GPU 对华出口的算力不超过 4800 TOPS 和带宽不超过 600 GB/s,导致最强的 H100 和 A100 禁售。黄教主随后推出针对中国市场的 A800 和 H800。
参考:
-
英伟达 A100 和 H100 已被禁止向中国供货
-
50 亿美元,算力芯片迎来狂欢,腾讯字节抢购英伟达 A800 订单
H100 与 A100:H100 比 A100 快多少?
16-bit 推理快约 3.5 倍,16-bit 训练快约 2.3 倍。
参考资料:https://timdettmers.com/2023/01/30/which-gpu-for-deep-learning/
物理机 vs 云服务
划重点:
-
如果经常做微调实验,有自己的物理机会方便很多很多
-
提供推理服务,首选云服务
-
如果有自建机房或 IDC,请随意
云服务厂商对比
国内主流
-
阿里云:https://www.aliyun.com/product/ecs/gpu (可申请免费试用)
-
腾讯云:https://cloud.tencent.com/act/pro/gpu-study
-
火山引擎:https://www.volcengine.com/product/gpu
国外主流
-
AWS:https://aws.amazon.com
-
Vultr:https://www.vultr.com
-
TPU:https://cloud.google.com/tpu
TPU 是 Google 专门用于加速机器学习的硬件。它特别适合大规模深度学习任务,通过高效的架构在性能和能源消耗上表现出色。
它的优点和应用场景:
-
高性能和能效: TPU 可以更快地完成任务,同时消耗较少的能源,降低成本。
-
大规模训练: TPU 适用于大规模深度学习训练,能够高效地处理大量数据。
-
实时推理: 适合需要快速响应的任务,如实时图像识别和文本分析。
-
云端使用: Google Cloud 提供 TPU 服务,允许用户根据需求使用,无需购买硬件。
适用于图像处理、自然语言处理、推荐系统等多个领域。
在国外,科研机构、大公司和初创企业普遍使用 TPU。
下面是对两款 NVIDIA GPU 在他主流厂商的价格进行对比:
-
A100:在云服务中,A100 是顶级的企业级 GPU,适用于高性能计算需求。
-
T4:相比之下,T4 更为经济,适合日常模型微调和推理任务。
NVIDIA A100:
云服务提供商 | GPU 型号 | CPU 核心数 | 内存(GiB) | 价格(元/小时) |
---|---|---|---|---|
火山引擎 | A100 | 14 核 | 245 | 40.39 |
阿里云 | A100 | 16 vCPU | 125 | 34.742 |
腾讯云 | A100 | 16 核 | 96 | 28.64 |
NVIDIA T4:
云服务提供商 | CPU 核心数 | 内存(GiB) | GPU 型号 | 价格(元/小时) |
---|---|---|---|---|
阿里云 | 4 vCPU | 15 | T4 | 11.63 |
火山引擎 | 4 核 | 16 | T4 | 11.28 |
腾讯云 | 8 核 | 32 | T4 | 8.68 |
算力平台
主要用于学习和训练,不适合提供服务。
-
Colab:谷歌出品,升级服务仅需 9 美金。https://colab.google.com
-
Kaggle:免费,每周 30 小时 T4,P100 可用。https://www.kaggle.com
-
AutoDL:价格亲民,支持 Jupyter Notebook 及 ssh,国内首选。https://www.autodl.com
建议:若需高速下载,尤其依赖于 GitHub 或 Docker 官方镜像,建议选择国外服务器。
根据场景选择 GPU
以下是我们为您提供的,基于显卡 4090 上的 chatglm 和 chatglm2 模型的 Fine tuning 实验数据概览:
模型 | 数据条数 | 时长 | 技术 |
---|---|---|---|
chatglm | 9999 | 1:42:46 | pt2 |
chatglm | 39333 | 6:45:21 | pt2 |
chatglm | 9999 | 1:31:05 | Lora |
chatglm | 39333 | 5:40:16 | Lora |
chatglm2 | 9999 | 1:50:27 | pt2 |
chatglm2 | 39333 | 7:26:25 | pt2 |
chatglm2 | 9999 | 1:29:08 | Lora |
chatglm2 | 39333 | 5:45:08 | Lora |
下面是 llm-utils 上一些选型的建议
- Falcon 是目前为止 huggingface 上排行榜第一的模型
根据不同的使用情境,以下是使用的建议 GPU:
用例 | 显卡要求 | 推荐显卡 |
---|---|---|
Running Falcon-40B | 运行 Falcon-40B 所需的显卡应该有 85GB 到 100GB 或更多的显存 | See Falcon-40B table |
Running MPT-30B | 当运行 MPT-30B 时,显卡应该具有 80GB 的显存 | See MPT-30B table |
Training LLaMA (65B) | 对于训练 LLaMA (65B),使用 8000 台 Nvidia A100 显卡。 | Very large H100 cluster |
Training Falcon (40B) | 训练 Falcon (40B) 需要 384 台具有 40GB 显存的 A100 显卡。 | Large H100 cluster |
Fine tuning an LLM (large scale) | 大规模微调 LLM 需要 64 台 40GB 显存的 A100 显卡 | H100 cluster |
Fine tuning an LLM (small scale) | 小规模微调 LLM 则需要 4 台 80GB 显存的 A100 显卡。 | Multi-H100 instance |
划重点:
-
对于本地个人研发项目,GeForce RTX 4090 等消费级 GPU 足以满足中等规模的需求。
-
对于公司的大规模数据和复杂模型,推荐使用如 NVIDIA A100 的高性能 GPU。
-
数据规模小时,可考虑预算内的 A10 或 T4 型号。
-
如果追求性价比,可以选择把 4090 显卡搭建服务器使用,也可以选择市面的第三方服务,比如:AutoDL 的 4090 服务
参考资料:
-
https://gpus.llm-utils.org/cloud-gpu-guide/
-
https://gpus.llm-utils.org/nvidia-h100-gpus-supply-and-demand/
服务器价格计算器
火山引擎提供的这个价格计算器很方便,做个大概的云服务器 GPU 选型价格参考。其它服务厂商价格相差不是很多。
https://www.volcengine.com/pricing?product=ECS&tab=2
在个人电脑运行一个大模型
cpp (c++ c plus plus)
-
纯 C/C++ 实现,无需外部依赖。
-
针对使用 ARM NEON、Accelerate 和 Metal 框架的 Apple 芯片进行了优化。
-
支持适用于 x86 架构的 AVX、AVX2 和 AVX512。
-
提供 F16/F32 混合精度,并支持 2 位至 8 位整数量化。
参考:https://github.com/li-plus/chatglm.cpp
部署 chatglm3
git clone --recursive https://github.com/li-plus/chatglm.cpp.git && cd chatglm.cpp
git submodule update --init --recursive
Quantize Model 量化模型
python3 -m pip install torch tabulate tqdm transformers accelerate sentencepiece
通过 convert 专为 GGML 格式
- 用于 convert.py 将 ChatGLM-6B 转换为量化的 GGML 格式。要将 fp16 原始模型转换为q4_0(量化 int4)GGML 模型,请运行:
python3 chatglm_cpp/convert.py -i THUDM/chatglm3-6b -t q4_0 -o chatglm3-ggml.bin
在命令行启动服务
第一步:使用 CMake 配置项目并在当前目录下创建一个名为 “build” 的构建目录
cmake -B build
第二步:使用先前生成的构建系统文件在构建目录 “build” 中构建项目,采用并行构建和 Release 配置
cmake --build build -j --config Release
第三步:运行
./build/bin/main -m chatglm3-ggml.bin -p 你好
启动 web 服务
python3 ./examples/web_demo.py -m chatglm3-ggml.bin
高稳定和高可用地部署模型
序号 | 模块名称 | 描述 |
---|---|---|
1 | 负载均衡 | 将流入的请求分发到多个模型实例上,如 Nginx, K8S 等 |
2 | 模型服务层(Torch Serve or vLLM) | 托管模型的实际运行,可能涉及多个副本或节点 |
3 | 日志和监控 | 收集服务日志,监控服务健康状况和性能,如 Prometheus, Grafana |
4 | 自动扩缩 | 根据负载动态调整模型服务层的资源和实例数量 |
这只是一个非常基础和简化的几个步骤。在真实的生产环境中:
-
需要考虑其他方面,如持续集成/持续部署(CI/CD)、灾备策略、多地域部署等
-
每一个模块都可能涉及多种技术和工具
-
确切的架构和工具选择也会根据具体的需求和环境而变化
如何在阿里云私有部署开源大模型
在整体的部署图里面我们看到 TorchServe 和向量数据库,接下来我们来了解一下
向量数据库的应用场景
-
知识库/问答系统:通过大模型对大量的文本数据进行编码,将结果存储在向量数据库中。当有新的查询进来时,可以迅速找到与查询最相似的文档或文本段落,从而快速返回答案。
-
图像识别与搜索:图片经过 Embedding 技术后,可以转化为一个向量。当用户上传一张图片进行搜索时,向量数据库可以快速找到与其最相似的图片。
-
内容推荐系统:根据用户的浏览、购买或其他行为,可以使用模型为用户生成一个向量表示,然后查询向量数据库中最相似的内容向量,从而为用户推荐相关内容。
选择向量数据库:
划重点:
-
通用数据库最初不是为矢量搜索而设计的,因此不如专用矢量数据库效率高。
-
如果您使用少量向量(例如<10万)并且已经使用了其中一个数据库(根据stackoverflow 2023调查,49%的专业开发人员使用PostgreSQL),务实的选择肯定是坚持下去,以保持您的技术堆栈简单。
-
当成本和/或延迟成为问题时,请考虑使用专用的矢量数据库(如 Pinecone、Qdrant、Weaviate、Milvus)可以实现更高性能和更好的查询结果。
参考资料:https://www.sicara.fr/blog-technique/how-to-choose-your-vector-database-in-2023
使用 vllm 部署大模型
-
官方网址: https://vllm.ai
-
官方github地址:https://github.com/vllm-project/vllm
-
支持的模型:https://vllm.readthedocs.io/en/latest/models/supported_models.html
部署前准备
我们需要把想运行的模型下载到服务器上
- 以 通义千问-7B 为案例
下载模型
git lfs install
git clone https://huggingface.co/Qwen/Qwen-7B-Chat
开始部署
第一步 设置 conda 环境
# 创建新的 conda 环境.
conda create -n myenv python=3.9 -y
conda activate myenv
第二步 安装 vllm
pip install vllm
第三步 运行我们的模型
python -m vllm.entrypoints.openai.api_server --model /root/autodl-tmp/Qwen-7B-Chat --trust-remote-code --port 6006
curl https://u202774-a5d2-aaa1d45d.westb.seetacloud.com:8443/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "/root/autodl-tmp/Qwen-7B-Chat",
"prompt": "讲个笑话",
"max_tokens": 100,
"temperature": 0.7
}'
基于vllm 部署大模型
-
官方网址: https://vllm.ai
-
官方github地址:https://github.com/vllm-project/vllm
vLLM 是一个快速且易于使用的库,用于进行大型语言模型(LLM)的推理和服务。它具有以下特点:
-
速度快:在每个请求需要3个并行输出完成时的服务吞吐量。vLLM比HuggingFace Transformers(HF)的吞吐量高出8.5倍-15倍,比HuggingFace文本生成推理(TGI)的吞吐量高出3.3倍-3.5倍
-
优化的 CUDA 内核
-
灵活且易于使用:
-
与流行的 Hugging Face 模型无缝集成。
-
高吞吐量服务,支持多种解码算法,包括并行抽样、束搜索等。
-
支持张量并行处理,实现分布式推理。
-
支持流式输出。
-
兼容 OpenAI API 服务器。
支持的模型
vLLM 无缝支持多个 Hugging Face 模型,包括 Aquila、Baichuan、BLOOM、Falcon、GPT-2、GPT BigCode、GPT-J、GPT-NeoX、InternLM、LLaMA、Mistral、MPT、OPT、Qwen 等不同架构的模型。
-
支持的模型:https://vllm.readthedocs.io/en/latest/models/supported_models.html
-
实验地址:基于vllm 部署大模型
基于 ChatGLM 部署到阿里云 PAI环境
什么是 TorchServe?
TorchServe 是一个专为 PyTorch 设计的模型服务工具,它可以帮助开发者轻松地部署、管理和提供 PyTorch 模型的服务。 它是由 PyTorch 团队与亚马逊 AWS 团队共同开发的,旨在为 PyTorch 用户提供一个简单、灵活且高效的模型部署解决方案。
TorchServe 是一个强大的工具,提供了多项功能和优势:
-
模型管理 API:通过优化工作角色与模型的分配,实现多模型管理。
-
推理 API:支持 REST 和 gRPC 的批量推理。
-
性能指南:内置支持优化、基准测试和分析 PyTorch 和 TorchServe 的性能。
-
富有表现力的处理程序架构:通过多种开箱即用的支持,轻松支持各种用例的推理。
下面是实验的基本思路
1. 准备阶段:
1.1 获取模型文件:
模型下载地址:https://huggingface.co/THUDM/chatglm2-6b
1.2 选择合适的服务器:
推荐使用阿里云的 PAI,因为它提供了一键部署、自动扩缩容和基础的运维能力。
2. 部署阶段:
2.1 准备好基础镜像:
-
使用
nvidia-smi
命令验证 nvidia 驱动是否已安装。如果没有,参考 NVIDIA 官方文档 进行安装。 -
基础镜像务必要集成好需要的环境:
2.2 加载模型:
假设服务器已经下载好模型,路径为:/home/chatglm2-6b
,更改加载模型的代码如下:
tokenizer = AutoTokenizer.from_pretrained("/home/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("/home/chatglm2-6b", trust_remote_code=True).cuda()
model.eval()
2.3 开发 API 接口:
使用 FastAPI 创建一个简单的 Web API,该 API 接受输入句子并返回模型的回复。
from fastapi import FastAPI
app = FastAPI()
model.eval()
@app.post("/v1/chat/completions")
def get_completion(...):
...
if __name__ == '__main__':
import uvicorn
uvicorn.run(app, host='0.0.0.0', port=8000)
3. 测试阶段:
发送 POST 请求到你的 API,检查返回结果是否正确:
curl 'http://(服务器的url):7000/v1/chat/completions' \
-H 'Content-Type: application/json' \
--data-raw '{"messages":[{"role":"user","content":"hi"}]}'
结果:
现在,业务方可以通过 API 与 ChatGLM 进行对话。系统也获得了一个与人聊天的 API 接口,直接调用此 API 即可。
实战具体步骤
通过 curl
测试的结果
基于开源 ChatUI 来测试
- 地址:https://github.com/Yidadaa/ChatGPT-Next-Web
推荐 开源ui框架:
https://github.com/lobehub/lobe-chat
https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web
简单的部署服务平台(国外)
通过以下平台可以做代理,部署一些服务
https://render.com/
https://zeabur.com/
https://vercel.com/
- 实验地址:在阿里云PAI上部署自己的模型
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。