编译pytorch源码-ARM框架下,银河麒麟V10系统基于CUDA11.8编译PyTorch

概述

最近公司想尝试在本地使用ChatGLM模型。 只是服务器安装了两块主板,所以只能在服务器上试用。 CUDA驱动等等,前面的朋友已经安装好了,并且成功识别了主板,所以我就跳过了。按照GIT README中的步骤操作,一切顺利,最后运行脚本时出现如下提示

RuntimeError: Not compiled with CUDA support

因为服务器是ARM​​(CPU是Phytium ST2500)。 从字面上看,官方编译的aarch64版本的PyTorch并没有启用CUDA支持。 我一开始怀疑是我的安装错误。 查了百度、google、bing,发现其他安装方式都得依赖conda这个工具,然后安装了Miniconda3、Anaconda3等,经过短暂的操作编译pytorch源码,发现他们的aarch64版本和服务器存在兼容性问题。 ,我只好放弃,自己编译。

Miniconda3问题

Miniconda3 will now be installed into this location:
/root/miniconda3
  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below
[/root/miniconda3] >>> 
PREFIX=/root/miniconda3
Unpacking payload ...
Miniconda3-latest-Linux-aarch64.sh:行 358: 10241 非法指令            (核心已转储)"$CONDA_EXEC" constructor --prefix "$PREFIX" --extract-conda-pkgs

Anaconda3问题

Anaconda3 will now be installed into this location:
/root/anaconda3
  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below
[/root/anaconda3] >>> /data1/anaconda3
PREFIX=/data1/anaconda3
Unpacking payload ...
Anaconda3-2023.03-1-Linux-aarch64.sh:行 353: 60027 非法指令            (核心已转储)"$CONDA_EXEC" constructor --prefix "$PREFIX" --extract-conda-pkgs

编译步骤

1. CUDA 11.8仅支持GCC-10,需要先安装GCC-10,Kirin版本源码只有7.3,所以参考博文自行编译GCC-10

源码编译器下载_编译pytorch源码_源码编译是什么意思

2.下载PyTorch源码

git clone https://github.com/pytorch/pytorch.git

3.编译源码并安装

#因为ChatGLM在Python 3.10版本运行成功,所以用3.10来编译,具体根据自己环境调整
cd pytorch
python3.10 setup.py build
python3.10 setup.py install

源码编译器下载_源码编译是什么意思_编译pytorch源码

问答

Q:安装GCC 7.3.0后,编译PyTorch时会报错。 我忘了报什么错误了,可能是因为句子错误之类的

答:切换到 GCC 10

Q:第一次编译GCC 10时,编译PyTorch时,收到以下错误

编译pytorch源码_源码编译是什么意思_源码编译器下载

**/libgfortran.a ... which may bind externally can not be used when making a shared object; recompile with -fPIC

A:后来编译GCC 10并执行configure脚本时,添加CFLAGS="-fPIC",重新编译GCC 10后,PyTorch编译成功。

注意:上面直接设置CFLAGS的方案应该不合理,并且可能会导致其他问题(比如覆盖之前的CFLAGS,导致程序优化不够)。 具体细节本文不予深入讨论。

Q:关于aarch64程序遇到非法指令集的问题

A:我不仅在一个程序中遇到过,而且在整个Clickhouse(以下简称CH)中也遇到过。 根本原因应该是不同平台上aarch64支持的指令集不同编译pytorch源码,所以aarch64程序不一定是100%通用的。

之前编译CH时,公司本地桌面CPU是Phytium FT1500+,服务器是Phytium FT2000+。 FT1500+机器编译的CH程序移到FT2000+服务器运行时会报非法指令,但不是所有程序。

参考链接

Ubuntu18.04——切换gcc版本/错误解决方案:error – unsupported GNU version gcc after 10 are notsupported

解决Cuda在Pytorch中加速GPU失败的问题

[C++]编译安装gcc10