参考资料
安装过程
-
在官方文档中,其对安装流程已经表述的比较详细,主要是安装nvidia-docker和安装编译FasterTransformer。其中难点主要是在安装nvidia-docker上。
-
当然其实也可以不安装nvidia-docker,直接使用配置好的cuda环境配置,但是这样的话我们就无法使用docker来配置环境,因此配置不好会污染环境,最好是使用docker安装环境,例如使用docker安装pytorch,在pytorch的镜像中安装FasterTransformer,编译出针对pytorch的FasterTransformer。因为FasterTransformer需要使用cuda调GPU,因此需要再容器中调用GPU,即配置好驱动环境,这在使用普通的docker是不能实现的。例如,我们可以随便进入一个容器,执行
nvidia-smi
看看能否识别出GPU设备。而安装nvidia-docker就是为了在容器中有GPU的环境。 -
为了配置docker,我们按照官方教程进行安装,安装最后,运行
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
,如果能识别到GPU,即结果类似于如下所示即可认为安装成功。+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.10 Driver Version: 535.86.10 CUDA Version: 12.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+ -
安装成功后,我们可以从nvidia官方拉取一个pytorch镜像并建立容器,之后在该容器中配置环境。
-
例如可以执行如下命令:
docker run --name ft_pytorch -ti --runtime=nvidia --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 nvcr.io/nvidia/pytorch:22.06-py3
。该命令就根据nvcr.io/nvidia/pytorch:22.06-py3
镜像建立容器,容器名字为ft_pytorch。其中--runtime=nvidia --gpus all
能够让我们在容器中识别到GPU,也就是上一步安装NVIDIA Container Toolkit的目的。在官方教程中,使用的是nvidia-docker命令,在这里我们只需要使用docker命令,外加--runtime=nvidia --gpus all
就可以实现同样的功能。 -
--ipc=host
是使容器共享宿主内存,这里主要是为了在容器内实现翻墙,从而方便的在容器内拉取github仓库。如果我们已经在linux服务器上安装好了翻墙软件例如clash,那么我们在容器中直接使用export http_proxy="http://127.0.0.1:7890/"
和export https_proxy="http://127.0.0.1:7890/"
就可以实现翻墙了。 -
此后,我们通过
docker start
运行并进入容器,可以先使用nvidia-smi
再验证一下能否识别到GPU,如果可以识别,就可以继续下一步。 -
拉取仓库
git clone https://github.com/NVIDIA/FasterTransformer.git
,并接着通过命令mkdir -p FasterTransformer/build, cd FasterTransformer/build
新建build文件夹。 -
执行
git submodule init && git submodule update
-
查找自己的GPU设备对应的DSM号,从官方网站上查询。
-
执行
cmake -DSM=xx -DCMAKE_BUILD_TYPE=Release -DBUILD_PYT=ON -DBUILD_MULTI_GPU=ON ..
,将xx替换为刚刚查询的DSM号。注意此前我在官方网站上查询得到的DSM是8.9,之后我将8.9带入,一直无法编译成功。后来换成89就可以了! -
执行
make -j12
编译,成功后就可以跑FasterTransformer中的示例验证是否真正成功了! -
可以使用小一点的模型,例如opt-125m进行验证。跑huggingface的官方样例可能还需要在容器中安装git lfs,可以在网上搜索,我是参考的官方教程,应该也可以参考这个教程。