问题描述
最近在使用tensorrt_llm 框架给模型加速,没想到配置环境的时候就遇到了一堆坑,主要表现为:①安装mpi4py包的时候各种报错,②需要的配置文件找不到,③各种包的版本不适配,④导入tensorrt_llm 的时候无任何反应等问题,解决方法如下:
问题一:
安装mpi4py这个包是最大的坑,后面的几个坑大多都是没有处理好这个坑导致的,这个解决了后面的问题可能就不会碰到了。
安装mpi4py之前要先安装openmpi,步骤如下:
# 下载openmpi
wget https://www.open-mpi.org/software/ompi/v5.0/downloads/openmpi-5.0.2.tar.gz
tar xvzf openmpi-5.0.2.tar.gz
cd openmpi-5.0.2
# 编译和安装
./configure
sudo make all install # 我当时在这里遇到了问题,起初安装的是1.10的版本,导致这一步报错,也就是最后会有"error"这个关键字输出,如果这一步遇到报错可以换个版本安装
# 添加环境变量
vim ~/.bashrc
#mpi4py
export LD_LIBRARY_PATH+=:/usr/local/lib
source ~/.bashrc
# 测试是否安装成功,如果没有报错就表示安装成功了
cd openmpi-1.10.2/examples
make
mpirun -np 4 hello_c
接下来就是安装mpi4py,切记要用conda安装,不要用pip,安装命令:conda install mpi4py。
这一步解决之后就可以安装tensorr_llm了,安装命令:
pip3 install --no-cache-dir tensorrt_llm==0.8.0.dev2024012301 --extra-index-url https://pypi.nvidia.com
如果下载速度太慢了可以使用镜像安装,命令:
pip3 install --no-cache-dir tensorrt_llm==0.8.0.dev2024012301 --extra-index-url https://pypi.nvidia.com -i https://pypi.tuna.tsinghua.edu.cn/simple
问题二:
/root/miniconda3/envs/finetune/compiler_compat/ld: warning: libopen-rte.so.40, needed by /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so, not found (try using -rpath or -rpath-link)
/root/miniconda3/envs/finetune/compiler_compat/ld: warning: libopen-pal.so.40, needed by /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so, not found (try using -rpath or -rpath-link)
/root/miniconda3/envs/finetune/compiler_compat/ld: warning: libm.so.6, needed by /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so, not found (try using -rpath or -rpath-link)
/root/miniconda3/envs/finetune/compiler_compat/ld: warning: libhwloc.so.15, needed by /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so, not found (try using -rpath or -rpath-link)
解决办法:
这些警告信息表明在编译或链接过程中找不到某些共享库 (libopen-rte.so.40, libopen-pal.so.40, libm.so.6, libhwloc.so.15)。这些库是 OpenMPI(用于并行计算的消息传递接口)的依赖库。其实系统中是有这些文件的,只不过没有在指定的路径下,所以只需要找到这些文件,然后重新指定一下这些文件的路径。
# 使用find来找这些文件
sudo find / -name libopen-rte.so.40
sudo find / -name libopen-pal.so.40
sudo find / -name libm.so.6
sudo find / -name libhwloc.so.15
然后我的这些文件都在" /usr/lib/x86_64-linux-gnu/ "下面,重新定义文件位置的环境变量:
echo 'export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
问题解决~
问题三:
因为这个框架一直在迭代,还不是很稳定,经过一番踩坑之后,建议安装tensorrt_llm的0.8.0版本,这个版本比较稳定。对应版本如下:
- python==3.10.8
- cuda==12.1
- torch==2.1.2.
问题四:
好不容易把tensorrt_llm 安装好了,幻想着终于可以跑代码了,结果一个脚本运行了半个小时还没有任何的输出,搞得一脸懵逼。通过debug定位到问题出在import tensorrt_llm,然后通过‘python3 -v -c “import tensorrt_llm”’查看详细的导入过程,最终定位到导入过程卡在了" # extension module ‘mpi4py.MPI’ loaded from ‘/root/miniconda3/lib/python3.10/site-packages/mpi4py/MPI.cpython-310-x86_64-linux-gnu.so’ "这一步,很明显是mpi4py这个包出问题了。
找了一圈解决方案,最终看到有人说要使用conda来安装mpi4py,给出的理由是:“它与通过 pip 安装不同,不同之处在于 conda 包提供了自己的 MPI 环境,而 pip 包使用系统上的环境。”。试了一下,果然OK了,tensorrt_llm 包成功导入,问题解决~
总结:
如果上述方法都解决不了,直接去colab上跑吧。