FasterTransformer在linux系统中的安装教程(ubuntu系统)

参考资料

安装过程

  • 在官方文档中,其对安装流程已经表述的比较详细,主要是安装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,可以在网上搜索,我是参考的官方教程,应该也可以参考这个教程

相关推荐
舒克起飞了1 分钟前
linux系统编程——Makefile、GDB调试
linux·运维·服务器
醇醛酸醚酮酯9 分钟前
std::promise和std::future的使用示例——单线程多链接、多线程单链接
网络·c++·算法
背影疾风10 分钟前
C++之路:类基础、构造析构、拷贝构造函数
linux·开发语言·c++
程序员弘羽36 分钟前
C++ 第四阶段 内存管理 - 第二节:避免内存泄漏的技巧
java·jvm·c++
m0_694845571 小时前
服务器如何配置防火墙规则开放/关闭端口?
linux·服务器·安全·云计算
阿巴~阿巴~2 小时前
Linux基本命令篇 —— alias命令
linux·服务器·bash
DolphinDB2 小时前
如何在C++交易系统中集成高性能回测与模拟撮合
c++
筏.k3 小时前
C++ 网络编程(14) asio多线程模型IOThreadPool
网络·c++·架构
好名字更能让你们记住我3 小时前
Linux多线程(十二)之【生产者消费者模型】
linux·运维·服务器·jvm·windows·centos
矩阵老炮3 小时前
Ubuntu20.4编译AOSP源码实践
ubuntu·aosp