昨日の記事で書いたesuparによるアイヌ語係り受け解析プログラムを、スーパーコンピュータ「富岳」のPyTorch-1.13.0で動かすことを試みた。しかし、富岳のPyTorch-1.13.0はコンパイル時にUSE_LAPACK=1
を指定しておらず、torch.nn.init.orthogonal_()
まわりで
File "/vol0004/apps/oss/spack-v0.19/opt/spack/linux-rhel8-a64fx/fj-4.8.1/py-torch-1.13.0-glqavnhys6plsjklw2bp3tkkh5ysyrqh/lib/python3.10/site-packages/torch/nn/init.py", line 484, in orthogonal_
q, r = torch.linalg.qr(flattened)
RuntimeError: Calling torch.geqrf on a CPU tensor requires compiling PyTorch with LAPACK. Please use PyTorch built with LAPACK support.
という悲しいエラーが出て、動かすことができなかった。仕方ないので、富岳のPyTorchを最新のPyTorch-2.2.0に入れ替えた上、TOKENIZERS_PARALLELISM=false
でtokenizerをなだめつつ、esuparを動かすことにした。
#! /bin/bash
#PJM -L rscgrp=small
#PJM -L elapse=1:00:00
#PJM -L node=1
#PJM -j
#PJM -S
. /vol0004/apps/oss/spack/share/spack/setup-env.sh
spack load py-numpy@1.23.4/hcqp4u5
G=`id | sed 's/^.*gid=[0-9]*(\([^)]*\)).*$/\1/'`
set `ls -d /vol*/$G /vol*/data/$G` $HOME
export PYTHONUSERBASE=$1/esupar
export PATH=$PYTHONUSERBASE/bin:$PATH
export TMPDIR=$PYTHONUSERBASE/tmp
mkdir -p $TMPDIR
pip3 install -U torch typing_extensions --user
pip3 install -U esupar --user
P=$TMPDIR/esupar.$PJM_JOBID.$$.py
cat << 'EOF' > $P
import esupar
nlp=esupar.load("ain")
doc=nlp("オラ エアシㇼ アイヌウタㇻ クヌカㇻ")
import deplacy
print(deplacy.to_conllu(doc))
deplacy.render(doc)
EOF
env TOKENIZERS_PARALLELISM=false python3 $P
富岳のログインノードからpjsub
してみたところ、ジョブ待ち・インストール・ダウンロード等も含め、20分ほどで以下の結果が得られた。
1 オラ ora SCONJ 接続詞 _ 6 advmod _ _
2 エアシㇼ easir ADV 副詞 _ 6 advmod _ _
3 アイヌ ainu NOUN 名詞 _ 4 nmod _ SpaceAfter=No
4 ウタㇻ utar NOUN 名詞 _ 6 obj _ _
5 ク ku PART 人称接辞 _ 6 nsubj _ SpaceAfter=No
6 ヌカㇻ nukar VERB 他動詞 _ 0 root _ SpaceAfter=No
オラ SCONJ <══════╗ advmod
エアシㇼ ADV <════╗ ║ advmod
アイヌ NOUN <╗ ║ ║ nmod
ウタㇻ NOUN ═╝<╗ ║ ║ obj
ク PART <╗ ║ ║ ║ nsubj
ヌカㇻ VERB ═╝═╝═╝═╝ root
「オラ エアシㇼ アイヌウタㇻ クヌカㇻ」という例文が、ちゃんと係り受け解析できているようだ。ただ、このやり方だと、manylinux2014_aarch64のバイナリをそのまま使ってしまうため、富岳のa64fxがイマイチ生かせていない。また、rustのスレッド周りを避けてしまっているので、tokenizersが遅くなってしまっている。つまり、SuPar-UniDicと同じ問題を抱えているのだけど、やはり私の手には余る感じだ。誰か代わりに解決してくれないかなあ。