昨日の記事を書きながら、スーパーコンピュータ「富岳」でStanzaが動くのかが、気になった。現時点の富岳にはPyTorch-1.7.0がインストールされているので、その上にStanzaを乗せて動かしてみよう。
#! /bin/bash
#PJM -L rscgrp=small
#PJM -L elapse=1:00:00
#PJM -L node=1
#PJM -j
#PJM -S
G=`id | sed 's/^.*gid=[0-9]*(\([^)]*\)).*$/\1/'`
set `ls -d /vol*/$G /vol*/data/$G` $HOME
export PYTHONUSERBASE=$1/Stanza
export PATH=/home/apps/oss/PyTorch-1.7.0/bin:$PYTHONUSERBASE/bin:$PATH
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/apps/oss/PyTorch-1.7.0/lib64
export STANZA_RESOURCES_DIR=$PYTHONUSERBASE/stanza_resources_dir
export TMPDIR=$PYTHONUSERBASE/tmp
mkdir -p $TMPDIR
pip3.8 install -U stanza deplacy tqdm typing_extensions --user
P=$TMPDIR/stanza.$PJM_JOBID.$$.py
cat << 'EOF' > $P
import stanza
nlp=stanza.Pipeline("eu")
doc=nlp("Gaur ama hil zen, gaur goizean ama hil nuen.")
import deplacy
print(deplacy.to_conllu(doc))
deplacy.render(doc)
EOF
python3.8 $P
富岳のログインノードからpjsub
してみたところ、ジョブ待ち・インストール・ダウンロード等も含め、20分ほどで以下の結果が得られた。
# text = Gaur ama hil zen, gaur goizean ama hil nuen.
# sent_id = 0
1 Gaur gaur ADV _ _ 3 advmod _ start_char=0|end_char=4
2 ama ama NOUN _ Case=Abs|Definite=Def|Number=Sing 3 nsubj _ start_char=5|end_char=8
3 hil hil VERB _ Aspect=Perf|VerbForm=Part 0 root _ start_char=9|end_char=12
4 zen izan AUX _ Mood=Ind|Number[abs]=Sing|Person[abs]=3|VerbForm=Fin 3 aux _ start_char=13|end_char=16
5 , , PUNCT _ _ 9 punct _ start_char=16|end_char=17
6 gaur gaur ADV _ _ 9 advmod _ start_char=18|end_char=22
7 goizean goiz NOUN _ Animacy=Inan|Case=Ine|Definite=Def|Number=Sing 9 obl _ start_char=23|end_char=30
8 ama ama NOUN _ Case=Abs|Definite=Def|Number=Sing 9 obj _ start_char=31|end_char=34
9 hil hil VERB _ Aspect=Perf|VerbForm=Part 3 conj _ start_char=35|end_char=38
10 nuen edun AUX _ Mood=Ind|Number[abs]=Sing|Number[erg]=Sing|Person[abs]=3|Person[erg]=1|VerbForm=Fin 9 aux _ start_char=39|end_char=43
11 . . PUNCT _ _ 3 punct _ start_char=43|end_char=44
Gaur ADV <════╗ advmod
ama NOUN <══╗ ║ nsubj
hil VERB ═╗═╝═╝═════╗═╗ root
zen AUX <╝ ║ ║ aux
, PUNCT <════════╗ ║ ║ punct
gaur ADV <══════╗ ║ ║ ║ advmod
goizean NOUN <════╗ ║ ║ ║ ║ obl
ama NOUN <══╗ ║ ║ ║ ║ ║ obj
hil VERB ═╗═╝═╝═╝═╝<╝ ║ conj
nuen AUX <╝ ║ aux
. PUNCT <════════════╝ punct
バスク語の例文「Gaur ama hil zen, gaur goizean ama hil nuen.」に対し、2つある「ama hil」がそれぞれnsubjとobjで繋がれている点も含め、ちゃんとUniversal Dependenciesで係り受け解析できている。とりあえず1ノードで動かしてみたけど、さて、大量の文章を係り受け解析する場合は、複数ノードにバラまいた方がいいかな。