富岳のspack0.19版python3.10にはtransformersが乗らないのか

昨日の[第34回「富岳」ユーザブリーフィング](https://www.fugaku.r-ccs.riken.jp/event/20230929_03)で「[PythonはSpackでのご使用をお願いします](https://www.fugaku.r-ccs.riken.jp/doc_root/ja/guidances/HelpdeskReport_202401.pdf)」との注意喚起がおこなわれた。まあ、そうすべきだとは私(安岡孝一)も思うのだが、「[富岳のPyTorch-1.7.0でtransformersを動かすには](https://qiita.com/KoichiYasuoka/items/73c1f0bc69101dd03386)」のプログラムを読めばわかる通り、私自身は富岳のspack0.19版python3.10を使っておらず、別のやり方でpython3.8を動かしている。と言うのも、富岳のspack0.19版python3.10には[transformers](https://huggingface.co/docs/transformers)が乗らなかったのだ。富岳のspack0.19の現状を、ちょっと見てみよう。

```
fugaku$ spack --version
0.19.0 (13392e7ea0c26eeca98529cc7633fbee8980df00)
```

富岳のspack0.19には、[python](https://packages.spack.io/package.html?name=python)3.10上に[py-pip](https://packages.spack.io/package.html?name=py-pip)23.0や[py-torch](https://packages.spack.io/package.html?name=py-torch)1.13.0が、インストールされている。

```
fugaku$ spack find python py-pip py-torch
-- linux-rhel8-a64fx / fj@4.8.1 ---------------------------------
py-pip@22.2.2  py-pip@23.0      py-torch@1.13.0  python@3.10.8
py-pip@22.2.2  py-torch@1.13.0  python@3.10.0    python@3.10.8
py-pip@23.0    py-torch@1.13.0  python@3.10.8    python@3.10.8

-- linux-rhel8-a64fx / gcc@12.2.0 -------------------------------
python@3.10.8

-- linux-rhel8-cascadelake / gcc@12.2.0 -------------------------
py-pip@22.2.2  py-pip@23.0  python@3.10.8  python@3.10.8  python@3.10.8

-- linux-rhel8-skylake_avx512 / gcc@8.4.1 -----------------------
py-pip@22.2.2  python@3.10.8
==> 20 installed packages
```

PyTorch-1.13.0が乗っているのは確かにうれしいのだが、どうも[富士通改造版](https://github.com/fujitsu/pytorch/wiki/PyTorch-DNNL_aarch64-build-manual-for-FUJITSU-Software-Compiler-Package-(PyTorch-v1.13.1)-JP)ではないようだ。一方で、[py-transformers](https://packages.spack.io/package.html?name=py-transformers)や[py-tokenizers](https://packages.spack.io/package.html?name=py-tokenizers)はインストールされていない。

```
fugaku$ spack find py-transformers py-tokenizers
==> No package matches the query: py-transformers py-tokenizers
```

transformersには[tokenizers](https://huggingface.co/docs/tokenizers)が必要なのだが、どちらも富岳には乗っていないわけだ。それならば、`spack install`でpy-transformersとpy-tokenizersを乗せれば良さそうだが、それに必要な[py-maturin](https://packages.spack.io/package.html?name=py-maturin)もインストールされていない。

```
fugaku$ spack find py-maturin
==> No package matches the query: py-maturin
```

とすると、`cargo`と`rustc`が必要になるのだが、富岳に乗っている[rust](https://packages.spack.io/package.html?name=rust)は、バージョンが1.60.0と[あまりに古い](https://blog.rust-lang.org/2022/04/07/Rust-1.60.0.html)。これだと、tokenizersの0.12.1あたりまでしかコンパイルできない。

```
fugaku$ spack find rust
-- linux-rhel8-a64fx / fj@4.8.1 ---------------------------------
rust@1.60.0  rust@1.60.0  rust@1.60.0
==> 3 installed packages
```

ならば、[rustの公式サイト](https://www.rust-lang.org/ja)から、最新のrustコンパイラを[ダウンロードしてくる](https://forge.rust-lang.org/infra/other-installation-methods.html#standalone-installers)ことになるのだが、富岳用のrustコンパイラが公開されているわけでは無い。aarch64-unknown-linux-gnuあたりのrustコンパイラを改造して、`fcc`(富岳の`gcc`もどき)に繋いでやる必要がある。しかし、私の力不足で、当時最新だった[rustコンパイラ1.74.1](https://blog.rust-lang.org/2023/12/07/Rust-1.74.1.html)を、富岳上でちゃんと動かすことが出来なかった。

そういうわけで、私が先月・今月に書いた記事([これ](https://qiita.com/KoichiYasuoka/items/73c1f0bc69101dd03386)と[これ](https://qiita.com/KoichiYasuoka/items/1885e7d524627b094a7e)と[これ](https://qiita.com/KoichiYasuoka/items/d170b6ec0394e4de09c6)と[これ](https://qiita.com/KoichiYasuoka/items/10f6cd64cc31387656a7)と[これ](https://qiita.com/KoichiYasuoka/items/fec7602bcca7fb2a6bf7))では、富岳のPyTorch-1.7.0に付随のpython3.8を使っているわけである。富岳における「PythonはSpackでのご使用をお願いします」というのは、確かにそれはその通りだと思うのだが、それだとtransformersを動かすのすら現時点では難行となる。私では力不足なので、誰か代わりにやってくれないかなあ。