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啥的,一顿操作,发现他们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,麒麟版本源只有7.3,故而参照博文自己编译GCC-10
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

Q&A

Q:安装GCC 7.3.0,编译PyTorch的时候会报错,具体报啥错忘记了,大概是语法错误之类
A:改用GCC 10

Q: 第一次编译GCC 10的时候,在编译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支持的指令集有差异,所以aarch64的程序不一定百分百通用。
之前编译CH的时候,公司本地台式机CPU是Phytium FT1500+,服务器是Phytium FT2000+,FT1500+机子编译的CH程序,挪到FT2000+服务器上面运行就会报非法指令,但并不是所有程序。

参考链接

Ubuntu18.04——切换gcc版本 / 报错解决: error – unsupported GNU version gcc later than 10 are not supported
解决Pytorch中Cuda无法GPU加速问题
【C++】编译安装 gcc10

你可能感兴趣的:(人工智能,pytorch,python,人工智能)