ARM アーキテクチャで Galaxy Kirin V10 システム用に CUDA11.8 に基づいて PyTorch をコンパイルします

概要

同社は、近い将来、ChatGLMモデルをローカルで使用してみたいと考えています。サーバーにのみ 2 枚のグラフィックス カードがインストールされているため、サーバー上でのみ試用できます。CUDAドライバーなどは、前の同僚がすでにインストールしていて、グラフィックカードの認識に成功したので、スキップします。GIT README の手順に従ってすべてがうまくいき、最終的にスクリプトの実行時に次のプロンプトが表示されました。

RuntimeError: Not compiled with CUDA support

サーバーがARM(CPUはPhytium ST2500)なので。文字通り、公式にコンパイルされた PyTorch の aarch64 バージョンでは CUDA サポートが有効になりません。最初はインストールが間違っているのではないかと思い、Baidu、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 をインストールする必要があります。Kirin バージョンのソースは 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 をコンパイルして構成スクリプトを実行するときに、CFLAGS="-fPIC" を追加します。GCC 10 を再コンパイルすると、PyTorch は正常にコンパイルされます。
注: CFLAGS を直接設定する上記のスキームは合理的ではなく、他の問題を引き起こす可能性があります (元の CFLAGS を上書きし、プログラムの最適化が不十分になるなど)。この記事では、具体的な詳細については詳しく説明しません。

Q: aarch64 プログラムで不正な命令セットの問題が発生しました。
A: 1 つのプログラムだけでなく、以前に Clickhouse (以下、CH と呼びます) が実装されたときにも問題が発生しました。根本的な原因は、異なるプラットフォームで aarch64 によってサポートされる命令セットが異なるため、aarch64 プログラムが 100% 汎用的ではない可能性があることです。
以前に CH をコンパイルしたとき、会社のローカル デスクトップ CPU は Phytium FT1500+、サーバーは Phytium FT2000+ でした。FT1500+ マシンでコンパイルされた CH プログラムは、FT2000+ サーバーに移動して実行すると不正な命令を報告しますが、すべてのプログラムが報告されるわけではありません。

参考リンク

Ubuntu18.04——gcc バージョン/エラーの解決策を切り替える: エラー – サポートされていない GNU バージョン 10 以降の gcc はサポートされていませんPytorch [C++]
で Cuda を GPU で高速化できない問題を解決しますgcc10 をコンパイルしてインストールします

おすすめ

転載: blog.csdn.net/qq_38189542/article/details/130683020
おすすめ