昨日の日記の続きだが、富岳のspack0.19版python3.10でtokenizersが動かない理由は、rustのスレッド周りにある。fcc
(富岳のgcc
もどき)はスレッドをサポートしているので、そこはrustコンパイラをうまく繋いでやればいいのだが、私(安岡孝一)の力不足でうまく繋げない。ならばTOKENIZERS_PARALLELISM=false
で、tokenizersにスレッドを使わせないようにすれば、何とかtransformersが動くんじゃないだろうか。12月27日の記事のプログラムを、富岳のspack0.19に移し替えてみよう。
#! /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-torch@1.13.0/glqavnh
G=`id | sed 's/^.*gid=[0-9]*(\([^)]*\)).*$/\1/'`
set `ls -d /vol*/$G /vol*/data/$G` $HOME
export PYTHONUSERBASE=$1/PyTorch-1.13.0
export PATH=$PYTHONUSERBASE/bin:$PATH
export HF_HOME=$PYTHONUSERBASE
export TMPDIR=$PYTHONUSERBASE/tmp
mkdir -p $TMPDIR
pip3 install -U transformers --user
P=$TMPDIR/fillmask.$PJM_JOBID.$$.py
cat << 'EOF' > $P
from transformers import pipeline
fmp=pipeline("fill-mask","KoichiYasuoka/deberta-large-japanese-aozora")
print(fmp("夜の底が[MASK]なった。"))
EOF
env TOKENIZERS_PARALLELISM=false python3 $P
富岳のログインノードからpjsub
してみたところ、ジョブ待ち・インストール・ダウンロード等も含め、20分ほどで以下の結果が得られた。
[{'score': 0.10754115134477615, 'token': 2113, 'token_str': '白く', 'sequence': '夜の底が白くなった。'}, {'score': 0.041453491896390915, 'token': 298, 'token_str': '重', 'sequence': '夜の底が重なった。'}, {'score': 0.03892168030142784, 'token': 3504, 'token_str': '黒く', 'sequence': '夜の底が黒くなった。'}, {'score': 0.0380183570086956, 'token': 114, 'token_str': 'どう', 'sequence': '夜の底がどうなった。'}, {'score': 0.03193163871765137, 'token': 3520, 'token_str': 'わるく', 'sequence': '夜の底がわるくなった。'}]
rustのスレッド周りを避ければ、一応transformersが動くようだ。tokenizersが遅くなるのさえガマンすれば、これで富岳のPyTorch-1.13.0が使えるかな。