Skip to content

Commit 178fa00

Browse files
authored
Merge pull request #5 from iomgaa-ycz/main
更新了中文ReadMe
2 parents c61611c + f45ca1b commit 178fa00

File tree

1 file changed

+48
-30
lines changed

1 file changed

+48
-30
lines changed

docs/zh-cn.md

Lines changed: 48 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
# 介绍
99

10-
使用 Docker Client 调用 NVIDIA Docker 来实现 GPU 容器的业务功能。如升降 GPU 容器的配置、无卡启动容器、扩缩容 Volume
10+
使用 Docker 客户端调用 NVIDIA Docker 实现 GPU 容器的业务功能。例如,提升 GPU 容器配置、启动无卡容器、放大和缩小卷大小
1111

1212
类似于 [AutoDL](https://www.autodl.com/docs/env/) 中关于容器实例的操作。
1313

@@ -22,31 +22,37 @@
2222
- [API](#api)
2323
- [环境准备](#环境准备)
2424
- [使用源码构建](#使用源码构建)
25+
- [下载发布版本](#下载发布版本)
26+
- [配置文件](#配置文件)
27+
- [运行](#运行)
2528
- [架构](#架构)
2629
- [组件介绍](#组件介绍)
2730
- [架构图](#架构图)
2831
- [文档](#文档)
2932
- [贡献代码](#贡献代码)
3033
- [Environment](#environment)
3134

32-
首先我必须向你描述,一个 GPU 容器启动时,它的目录应该是怎么样的。如下:
35+
首先我需要描述 GPU 容器在启动时的目录结构应该是什么样的。如下:
3336

3437
| 名称 | 路径 | 性能 | 说明 |
3538
|------|---------------|--------|-----------------------------------------------------------------------------------------------|
3639
| 系统盘 | / | 本地盘,快 | 容器停止后数据不会丢失。一般系统依赖和 Python 安装包都会在系统盘下,保存镜像时会保留这些数据。容器升降 GPU、Volume 配置后,数据会拷贝到新容器。 |
3740
| 数据盘 | /root/foo-tmp | 本地盘,快 | 使用 Docker Volume 挂载,容器停止后数据不会丢失,保存镜像时不会保留这些数据。适合存放读写 IO 要求高的数据。容器升降 GPU、Volume 配置后,数据会拷贝到新容器。 |
3841
| 文件存储 | /root/foo-fs | 网络盘,一般 | 可以实现多个容器文件同步共享,例如 NFS。 |
3942

40-
然后我们来讨论一下更新操作(升降 GPU 容器的配置、扩缩容 Volume 数据卷,这些都属于更新操作,为了方便理解,下面将使用 "更新"
41-
来代替这些具体的操作)。
43+
接下来我们讨论更新操作(提升 GPU 容器配置、放大和缩小卷大小,所有这些都是更新操作,为了便于理解,我们将使用“更新”一词而不是这些具体的操作)。
4244

43-
当我们更新一个容器时,会创建一个新的容器,例如旧的容器 foo-0 使用了 3 张显卡,我们想让它使用 5 张,调用接口后就会创建新的容器
44-
foo-1 来代替 foo-0(foo-0 不会被删除),类似于 K8s 中更新一个 Pod,会滚动替换一样。
45+
当我们更新一个容器时,会创建一个新的容器。
4546

46-
值得注意的是,新容器看起来和旧容器没什么不同,除了我们指定要更新的部分,甚至你安装的软件,都会原封不动的出现在新容器中。更不用说,数据盘、文件存储、环境变量、端口映射了,这看起来很酷
47-
😎。
47+
例如,如果旧容器 foo-0 使用了 3 个图形卡,我们想让它使用 5 个图形卡,调用接口创建新容器,foo-1 将被创建以替换 foo-0(foo-0 不会被删除),类似于在 K8s 中更新 Pod 会进行滚动替换。
4848

49-
更新Volume 时也是如此。
49+
值得注意的是,新容器与旧容器看起来没什么不同,除了我们指定要更新的部分,甚至你安装的软件,也会原样出现在新容器中。
50+
51+
更不用说,数据盘、文件存储、环境变量和端口映射了。
52+
53+
看起来相当酷 😎。
54+
55+
更新卷时也是如此。
5056

5157
# 实现的功能
5258

@@ -61,12 +67,14 @@ foo-1 来代替 foo-0(foo-0 不会被删除),类似于 K8s 中更新一个
6167
- [x] 在容器内部执行命令
6268
- [x] 删除容器
6369
- [x] 保存容器为镜像
70+
- [x] 获取容器创建信息
6471

6572
## 卷(Volume)
6673

6774
- [x] 创建指定容量大小的 Volume
6875
- [x] 删除 Volume
6976
- [x] 扩缩容 Volume
77+
- [x] 获取卷创建信息
7078

7179
## GPU
7280

@@ -82,37 +90,51 @@ foo-1 来代替 foo-0(foo-0 不会被删除),类似于 K8s 中更新一个
8290

8391
## API
8492

85-
你可以通过导入 [gpu-docker-api.openapi.json](..%2Fapi%2Fgpu-docker-api.openapi.json)
86-
或查阅 [gpu-docker-api-sample-interface.md](..%2Fapi%2Fgpu-docker-api-sample-interface.md)
87-
了解并调用接口。
93+
导入 [gpu-docker-api.openapi.json](api%2Fgpu-docker-api.openapi.json) 以调用 api。
8894

8995
## 环境准备
9096

91-
1. 测试环境已经安装好 NVIDIA 显卡对应的驱动。
92-
2. 确保你的测试环境已安装 NVIDIA Docker,安装教程:[NVIDIA Docker 安装](https://zhuanlan.zhihu.com/p/361934132)
93-
3. 为支持创建指定大小的 Volume,请确保 Docker 的 Storage Driver 为 Overlay2。创建并格式化一个分区为 XFS 文件系统,将挂载后的目录作为
94-
Docker Root Dir。
95-
详细说明:[volume-size-scale.md](volume%2Fvolume-size-scale.md)
96-
4. 确保你的测试环境已安装 ETCD V3,安装教程:[ETCD](https://github.com/etcd-io/etcd)
97-
5. 克隆并运行 [detect-gpu](https://github.com/mayooot/detect-gpu)
97+
1. 测试环境已经安装了NVIDIA显卡的相应驱动程序。
98+
2. 确保你的测试环境上安装了[NVIDIA Docker Installation](https://zhuanlan.zhihu.com/p/361934132)
99+
3. 为了支持创建指定容量大小的卷,确保Docker的存储驱动是Overlay2。创建并格式化一个分区为XFS文件系统,并使用挂载的目录作为Docker Root Dir。教程:[volume-size-scale-en.md](https://github.com/mayooot/gpu-docker-api/blob/main/docs%2Fvolume%2Fvolume-size-scale-en.md)
100+
4. 确保你的测试环境安装了ETCD V3,安装教程:[ETCD](https://github.com/etcd-io/etcd)
101+
5. 克隆并运行 [detect-gpu](https://github.com/mayooot/detect-gpu)
98102

99103
## 使用源码构建
100104

101-
### 构建
102-
103105
~~~
104106
git clone https://github.com/mayooot/gpu-docker-api.git
105107
cd gpu-docker-api
106108
make build
107109
~~~
108110

109-
### 修改配置文件(可选)
111+
## 下载发布版本
112+
113+
[release](https://github.com/mayooot/gpu-docker-api/releases)
114+
115+
## 配置文件
116+
117+
如果您从 发布版 下载了可执行文件,您应该手动下载 config.toml 并创建 etc 目录。
118+
119+
目录结构如下:
120+
121+
~~~
122+
$ tree
123+
.
124+
├── etc
125+
│ └── config.toml
126+
└── gpu-docker-api-linux-amd64
127+
128+
1 目录,2 文件
129+
~~~
130+
131+
然后按照您想要的方式进行更改。
110132

111133
~~~
112134
vim etc/config.yaml
113135
~~~
114136

115-
### 运行项目
137+
## 运行
116138

117139
~~~
118140
./gpu-docker-api-${your_os}-amd64
@@ -144,21 +166,17 @@ vim etc/config.yaml
144166
* 创建 Container 时生成版本号,默认为 0,当 Container 被更新后,版本号+1。
145167
* 创建 Volume 时生成版本号,默认为 0,当 Volume 被更新后,版本号+1。
146168

147-
程序关闭后,会将 VersionMap 写入 ETCD,当程序再次启动时,从 ETCD 中拉取数据并初始化。
148169
* gpuScheduler:分配 GPU 资源的调度器,将容器使用 GPU 的占用情况保存到 gpuStatusMap。
149170
* gpuStatusMap:
150171
维护服务器的 GPU 资源,当程序第一次启动时,调用 detect-gpu 获取全部的 GPU 资源,并初始化 gpuStatusMap,Key 为 GPU 的
151172
UUID,Value 为 使用情况,0 代表未占用,1 代表已占用。
152173

153-
程序关闭后,会将 gpuStatusMap 写入 ETCD,当程序再次启动时,从 ETCD 中拉取数据并初始化。
154-
155174
* portScheduler:分配 Port 资源的调度器,将容器使用的 Port 资源保存到 usedPortSet。
156175
* usedPortSet:
157-
维护服务器的 Port 资源,已经被占用的 Port 会被加入到这个 Set。
158-
159-
程序关闭后,会将 usedPortSet 写入 ETCD,当程序再次启动时,从 ETCD 中拉取数据并初始化。
176+
维护服务器的端口资源。已经使用的端口将被添加到这个 Set 中。。
160177

161-
* docker:实际创建 Container、Volume等资源的组件,并安装了 NVIDIA Container Toolkit,拥有调度 GPU 的能力。
178+
* docker:实际创建资源(如容器、卷等)的组件。为了调度 GPU,需要 [NVIDIA
179+
Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) 容器工具包。
162180

163181
* etcd:保存 Container/Volume的全量创建信息,以及生成 mod_revision 等 Version 字段用于回滚资源的历史版本。存储在 ETCD
164182
中资源如下:

0 commit comments

Comments
 (0)