Skip to content

Commit 2055ba4

Browse files
authored
Merge pull request #23 from little1d/ch_07-llm-deploy-framework
Ch 07 llm deploy framework
2 parents 3c73020 + 7636154 commit 2055ba4

File tree

8 files changed

+419
-0
lines changed

8 files changed

+419
-0
lines changed

docs/chapter7/appendix.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# 附录:了解相关技术
2+
3+
> 附录作为第七章时间部分学习资料的补充,借助GPT的帮助撰写而成,主要是做科普目的。
4+
5+
## 1. Stable-Diffusion
6+
Stable Diffusion 是由 Stability AI 提供的一个开源生成模型,旨在通过扩散模型(Diffusion Model)生成高质量图像。扩散模型是一种生成模型,通过模拟噪声的逐渐去除过程来生成图像。与传统的 GAN(生成对抗网络)相比,扩散模型提供了更好的生成效果和控制能力。
7+
8+
Stable Diffusion 的核心优势之一是其文本到图像的能力,可以根据文本描述生成相应的图像。它还允许用户通过细化或修改输入图像来生成新内容。
9+
10+
### 主要特点:
11+
- 文本到图像生成:用户可以通过简单的文本描述生成复杂的图像。
12+
- 高度可定制:用户可以调整生成图像的风格、细节等。
13+
- 高质量图像生成:与其他生成模型相比,生成的图像质量更高,细节丰富。
14+
15+
### 学习资源:
16+
- [Stable Diffusion GitHub](https://github.com/CompVis/stable-diffusion) — 该项目的官方仓库,包含模型的代码和训练方法。
17+
- [Stable Diffusion 官方文档](https://stability.ai/blog/stable-diffusion-public-release) — 对于 Stable Diffusion 的详细介绍。
18+
- [如何使用 Stable Diffusion](https://huggingface.co/spaces/stabilityai/stable-diffusion) — 在 Hugging Face 上使用 Stable Diffusion 的示例和演示。
19+
20+
---
21+
22+
## 2. TensorRT
23+
TensorRT 是由 NVIDIA 开发的高性能深度学习推理优化库,它可以显著提高神经网络模型的推理性能,尤其是在 GPU 上。TensorRT 提供了多种优化方法,如精度降低(从 FP32 降至 FP16 或 INT8)和层融合等,以加速深度学习推理任务。
24+
25+
### 主要功能:
26+
- **优化推理**:通过融合操作和精度优化,使得推理速度大幅提升。
27+
- **支持多种框架**:TensorFlow、PyTorch、ONNX 等流行框架均可与 TensorRT 配合使用。
28+
- **兼容 NVIDIA GPU**:利用 NVIDIA GPU 强大的计算能力,特别是在使用 Volta 和 Turing 架构的 GPU 时。
29+
30+
### 学习资源:
31+
- [TensorRT 官方文档](https://developer.nvidia.com/tensorrt) — 介绍 TensorRT 的安装、使用和优化技巧。
32+
- [TensorRT GitHub](https://github.com/NVIDIA/TensorRT) — 官方代码仓库,包含示例和实现。
33+
- [TensorRT 教程](https://developer.nvidia.com/tensorrt/quick-start-guide) — 快速上手指南。
34+
35+
---
36+
37+
## 3. Docker
38+
Docker 是一个开源的容器化平台,它允许开发人员将应用程序及其所有依赖打包到一个标准化的容器中,这样可以确保应用在不同的环境中都能以相同的方式运行。通过容器化,开发人员可以避免“在我机器上可以工作”的问题,使得软件交付变得更简单、可靠。
39+
40+
### 主要特点:
41+
- **一致的开发环境**:开发人员可以在本地机器、测试环境和生产环境中使用相同的 Docker 容器。
42+
- **轻量化**:Docker 容器相较于虚拟机更加轻量,占用的资源少,启动速度快。
43+
- **便捷的应用交付**:Docker 可以将应用程序打包成镜像,方便在不同平台上部署和运行。
44+
45+
### 学习资源:
46+
- [Docker 官方文档](https://docs.docker.com/) — 详细的 Docker 使用手册。
47+
- [Docker 入门教程](https://www.runoob.com/docker/docker-tutorial.html) — 提供基础的 Docker 使用教程。
48+
- [Docker 从入门到进阶](https://www.docker.com/101-tutorial) — Docker 官方提供的入门教程,适合新手。
49+
50+
---
51+
52+
## 4. ResNet (包含 ImageNet)
53+
ResNet(Residual Networks)是一种深度神经网络架构,提出了残差连接(Residual Connection)这一概念,可以让网络在变得更深时避免梯度消失问题。ResNet 的一个关键创新是引入了“跳跃连接”,即通过让某些层的输出跳过中间层,直接传递到更深的层,从而解决了深层网络难以训练的问题。
54+
55+
### ResNet 和 ImageNet:
56+
ResNet 在 ImageNet 挑战赛中的成功标志着深度学习的一个重要进步。ImageNet 是一个包含超过 1400 万张标记图像的视觉数据集,广泛用于图像分类、物体检测等任务的研究。
57+
58+
### 主要特点:
59+
- **残差学习**:通过残差连接来避免深层网络的梯度消失问题。
60+
- **高效的训练**:即使是非常深的网络(如 152 层)也能顺利训练。
61+
- **广泛应用**:ResNet 在计算机视觉领域被广泛应用,特别是在图像分类任务上表现优异。
62+
63+
### 学习资源:
64+
- [ResNet 论文](https://arxiv.org/abs/1512.03385) — 原始的 ResNet 论文,详细介绍了网络架构。
65+
- [ImageNet 官方网站](http://www.image-net.org/) — ImageNet 数据集的官网,包含数据集下载和使用说明。
66+
- [TensorFlow 中的 ResNet 实现](https://www.tensorflow.org/tutorials/images/transfer_learning) — TensorFlow 提供的 ResNet 实现示例。
67+
68+
---
69+
70+
## 5. Kubernetes
71+
Kubernetes 是一个开源的容器编排平台,旨在自动化容器化应用程序的部署、扩展和管理。它可以帮助开发人员和运维人员管理分布式应用程序、负载均衡、容器调度等任务。Kubernetes 支持多种云平台和本地环境,广泛应用于微服务架构和 DevOps 工作流中。
72+
73+
### 主要特点:
74+
- **自动化容器管理**:Kubernetes 可以自动处理容器的部署、扩展和健康检查。
75+
- **负载均衡**:Kubernetes 能够自动分配流量到容器副本,实现负载均衡。
76+
- **服务发现与自我修复**:Kubernetes 会自动监控应用程序的健康状况,并在必要时进行重启或替换。
77+
78+
### 学习资源:
79+
- [Kubernetes 官方文档](https://kubernetes.io/docs/) — 提供了 Kubernetes 的全面介绍和操作指南。
80+
- [Kubernetes 入门教程](https://www.runoob.com/kubernetes/kubernetes-tutorial.html) — 适合初学者,快速上手 Kubernetes。
81+
- [Kubernetes 系列教程](https://www.udemy.com/course/learn-kubernetes/) — Udemy 提供的 Kubernetes 教程,适合深入学习。
82+
83+
---

docs/chapter7/chapter7_4.md

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
# 使用Triton和TensorRT部署Stable Diffusion模型
2+
3+
本示例演示了如何通过利用 TensorRT pipeline 和 utilities,将Stable Diffusion模型部署到Triton中。
4+
5+
以TensorRT演示为基础,本示例包含一个可重用的基于Python的后端`/backend/diffusion/model.py`,适用于部署多个版本和配置的Diffusion模型,如果不支持 CUDA,应该也可以使用CPU推理,但是本节提供的脚本是使用了GPU的。
6+
7+
## 环境要求
8+
9+
以下指令需要在安装了 Docker 的 Linux 系统中进行。若要支持 CUDA,请确保您的 CUDA 驱动程序符合 pytorch 的官方要求。
10+
11+
在开始一切之前,请确保您的 docker 服务已正常开启。
12+
13+
> [!TIP]
14+
15+
> 作者注:关于复现此示例所需的环境,作者尝试过很多技术方案。包括 autodl 租服务器,虚拟机,podman, docker in docker 以及市面上能看到的各种 notebook 开发环境提供商(kaggle, colab, AI studio)等,因为部署推理服务器需要用到docker,需要sudo权限,并且要在Linux环境下进行,辗转踩坑许久后,都不能让学习者轻松配置,为了避免给学习者带了更多不必要的学习成本,本教程以分享为主,需要自己有本地Linux机器。在此向各位学习者致歉。如果您有好的解决方案,欢迎在issue中分享。
16+
17+
> 当然如果有些小伙伴没有本地linux服务器,不能动手实操,也没有关系,教程贡献者会尽量将教程写得详细清晰,供大家学习。事实上如果不是面向生产学习,这里也不推荐大家进行复现。。。
18+
> 就连triton官方上也写得很详细,文档只供参考,如果真正用在生产环境一定要仔细审查代码
19+
20+
## 构建Triton推理服务器镜像
21+
22+
该示例基于 Docker 镜像 `nvcr.io/nvidia/tritonserver:24.08-py3`
23+
24+
提供了一组便捷的脚本,用于创建一个包含 TensorRT Stable Diffusion 演示依赖的Docker镜像(`nvcr.io/nvidia/tritonserver:24.01-py3`)。
25+
26+
### Triton推理服务器 + TensorRT OSS
27+
28+
克隆官方示例仓库:
29+
30+
```bash
31+
git clone https://github.com/triton-inference-server/tutorials.git --single-branch
32+
cd tutorials/Popular_Models_Guide/StableDiffusion
33+
```
34+
35+
36+
37+
构建 Tritonserver Diffusion Docker 镜像(nvcr.io/nvidia/tritonserver,这个镜像特别大,在镜像里又要下很多包,下载时间特别长,如果你不听劝实在要下,推荐使用[南大的镜像源](https://doc.nju.edu.cn/books/e1654/page/ngc)):
38+
39+
```bash
40+
sudo ./build.sh
41+
```
42+
43+
![开始build镜像](./images/figure-3.png)D
44+
45+
![下载完成](./images/figure-5.png)
46+
47+
下载完成后,可能出现下面这个错误:
48+
49+
![](./images/figure-6.png)
50+
51+
如果你本地确认执行`nvidia-smi`命令没有问题,
52+
那这代表运行 Triton Inference Server 容器时,没有正确配置容器运行时以支持 GPU 访问。可以参考下面的步骤解决:
53+
54+
1. 安装和配置 NVIDIA Container Toolkit
55+
56+
```bash
57+
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
58+
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
59+
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
60+
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
61+
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
62+
```
63+
64+
2. 更新包列表并安装 NVIDIA Container Toolkit:
65+
66+
```bash
67+
sudo apt-get update
68+
sudo apt-get install -y nvidia-container-toolkit
69+
```
70+
3. 配置docker并重启使用NVIDIA 运行时
71+
72+
```bash
73+
sudo nvidia-ctk runtime configure --runtime=docker
74+
sudo systemctl restart docker
75+
```
76+
77+
这样就可以继续执行下一步啦。
78+
79+
## 构建并运行Stable Diffusion v 1.5
80+
81+
### 启动Tritonserver Diffusion容器
82+
83+
以下命令启动容器,并将当前目录挂载为`.workspace`
84+
85+
```bash
86+
sudo ./run.sh
87+
```
88+
89+
如图,我们就进入到容器中了:
90+
91+
![进入容器](./images/figure-7.png)
92+
93+
### 构建Stable Diffusion v 1.5引擎
94+
95+
> [!TIP]
96+
> 本节需要使用到HuggingFace上托管的Stable Diffusion模型,[传送门](https://huggingface.co/benjamin-paine/stable-diffusion-v1-5)。你需要先注册一个账号然后在该仓库下点击同意授权,然后才能下载模型。
97+
> 接着创建一个 HuggingFace Access Token,[传送门](https://huggingface.co/settings/token),然后将该Token通过以下语句导出
98+
99+
```bash
100+
export HF_TOKEN=<your_hugging_face_token>
101+
```
102+
103+
```bash
104+
./scripts/build_models.sh --model stable_diffusion_1_5
105+
```
106+
107+
**预期输出**
108+
109+
```bash
110+
diffusion-models
111+
|-- stable_diffusion_1_5
112+
| |-- 1
113+
| | |-- 1.5-engine-batch-size-1
114+
| | |-- 1.5-onnx
115+
| | |-- 1.5-pytorch_model
116+
| `-- config.pbtxt
117+
```
118+
119+
### 启动服务器实例
120+
121+
```bash
122+
tritonserver --model-repository diffusion-models --model-control-mode explicit --load-model stable_diffusion_1_5
123+
```
124+
125+
**预期输出**
126+
127+
```bash
128+
I0229 20:15:52.125050 749 server.cc:676]
129+
+----------------------+---------+--------+
130+
| Model | Version | Status |
131+
+----------------------+---------+--------+
132+
| stable_diffusion_1_5 | 1 | READY |
133+
+----------------------+---------+--------+
134+
```
135+
136+
## 构建并运行Stable Diffusion XL
137+
138+
### 启动Tritonserver Diffusion容器
139+
140+
以下命令启动容器,并将当前目录挂载为`.workspace`
141+
142+
```bash
143+
./run.sh
144+
```
145+
146+
## 发送推理请求
147+
148+
我们提供了一个示例客户端应用程序,使得发送和接收请求变得更加简单。
149+
150+
### 启动Tritonserver Diffusion 容器
151+
152+
在与服务器不同的终端中,启动新容器。
153+
154+
```bash
155+
./run.sh
156+
```
157+
158+
### 发送提示词到Stable Diffusion 1.5
159+
160+
```bash
161+
python3 client.py --model stable_diffusion_1_5 --prompt "butterfly in new york, 4k, realistic" --save-image
162+
```
163+
164+
**示例输出**
165+
166+
```bash
167+
Client: 0 Throughput: 0.7201335361144658 Avg. Latency: 1.3677194118499756
168+
Throughput: 0.7163933558221957 Total Time: 1.395881175994873
169+
If is given then output images will be saved as jpegs.--save-image
170+
```
171+
172+
```
173+
client_0_generated_image_0.jpg
174+
```
175+
176+
![client_0_generated_image_0.jpg](https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/_images/client_0_generated_image_0_1_5.jpg)
177+
178+
如果你想更加全面的学习,可以参考triton inference server 官方源文档,[传送门](https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/tutorials/Popular_Models_Guide/StableDiffusion/README.html)。

0 commit comments

Comments
 (0)