蛇使いな彼女BLOG
【第125回】PyTorch入門~後日談~
2025.03.21

PyTorchについて、これまでスムーズに進行してきましたが
実際のところ、モデルの学習と評価を行う際にパッケージ依存の警告や以下のエラーが発生していました。
今回は、エラーの内容と改善方法についてまとめます。
まず1つ目、
ImportError: 'NeighborSampler' requires either 'pyg-lib' or 'torch-sparse'
近傍サンプリングでエラーが出ているみたいです。これに関してはネット上で調べたら山ほど資料が出てくるので詳しい説明はしませんが、
以下の1行でFalseが出れば、単純にライブラリのインストールができていないだけです。
>>> print(torch_geometric.typing.WITH_PYG_LIB)
False
↑インストールしたら直ります
pip install pyg-lib -f https://data.pyg.org/whl/nightly/torch-2.1.0+cu118.html
上記、.html直前のtorchバージョンは現在使用しているバージョンと同じものを指定します。
次に2つ目、
モデルのトレーニングを開始してすぐに発生したエラーですが
RuntimeError: scatter(): Expected dtype int64 for index
このRuntimeErrorがくせ者で、以下のコマンドからtorchと関連ツールのバージョンを上げても改善しませんでした。
◆巷の解決法
pip install torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-2.1.0+cpu.html
pip install --upgrade torch pip install --upgrade ultralytics
この後1日くらい悩んでいたんですが、そもそもエッジインデックスに関わるエラーということで
もう一度スクリプトを確認していくことにしました。(見やすくするために順番変えたり書き換えたりしているところがあったので(笑))
すると原因分かりました!
遡ること、mappedIDを作ったとき
もとのコードでpd.RangeIndexを使う意味が分からなかったので、数値処理ではおなじみのnp.arangeに変更したのがいけなかったようです。
♯間違い unique_user_id = pd.DataFrame({'userId': unique_user_id, 'mappedID':np.arange(len(unique_user_id)), }) unique_movie_id = pd.DataFrame({'movieId': unique_movie_id, 'mappedID': np.arange(len(unique_movie_id)), })
np.agangeは型がint32になってしまっているのが原因でした!!
♯正解 unique_user_id = pd.DataFrame({'userId': unique_user_id, 'mappedID':pd.RangeIndex(len(unique_user_id)), }) unique_movie_id = pd.DataFrame({'movieId': unique_movie_id, 'mappedID': pd.RangeIndex(len(unique_movie_id)), })
pd.RangeIndexを使うとマッピングIDがnp.int64の型で作成されるため、無事モデルのトレーニング~検証まで実行することができました!
こんな細かいところにも気を使わないとうまく動かないなんて( ゚Д゚)
ちなみに、torchのバージョンはこれらのエラーと戦う中で最終的に2.5.1+cpuに落ち着きました。
(結局GPU無いからCUDAの意味ないじゃんと我に返りました)
そして結構なボリュームのデータセットを扱いましたが、CPUで処理できる事が分かったので、おいおいノードとエッジの図化について勉強していきたいと思います。
それでは('◇')ゞ