2025/8/12の研究ログ
コードをgithubで管理する
.gitignoreが全然反映されない
と思っていたら再読み込みのボタンがあった
vscode上で反映されてなかっただけかも
すごい時間かかったなぁ
今度は100Mを超えると怒られる
ptファイルがいけなかった
gitignoreを適用したが,コミットしてあった分が消えない
一度コミットを巻き戻す
巻き戻したら全てignoreされる
なぜ?
違う.ignoreされているのではなく,ファイルが削除されている
revertで削除されたファイルを復元しよう
できるかな
git reset --hard hash値で行けた
revertがまさか最初から置いてあるファイルも消すとは思っていなかった
最初にgit ignoreだけcommitしたのがまずかったか?
ptファイルがやはりコミットされている
キャッシュを消しただけではダメなのか?
追跡からは外れたように見えるのだが...
面倒だからもう一度.gitを削除する
remoteファイルも再設定
今は一々gh repo delete > gh repo create...という手順を踏んでいる
もっと効率的なやり方はないだろうか
ようやく上手くいった
結局1.5hほど格闘したらしい
動かすための準備
データのダウンロードが終わらないので他の作業をする
評価だけ動かそう
extract_embeddings.pyを理解する
学習済みモデルを使って特徴抽出
音データの埋め込み特徴量を作成
入力はbeatsのptファイル
出力先はembeddings/beats
train_pretrained.pyを理解する
checkpointを読み込んで学習を再開するか,評価に使用
train_pretrained.pyを実行
python train_pretrained.py --eval_from_checkpoint baseline_pretrained_2024/epoch=259-step=30680.ckptでエラーが発生
これuv runじゃないからでは?
code: error
ImportError: dlopen(/Users/takehonshion/work/iniad/dcase2024_baseline/.venv/lib/python3.11/site-packages/sed_scores_eval/base_modules/cy_detection.cpython-311-darwin.so, 0x0002): Library not loaded: @rpath/libc++.1.dylib
Referenced from: <08B731E6-408B-3383-9F05-04A0C93659A1> /Users/takehonshion/work/iniad/dcase2024_baseline/.venv/lib/python3.11/site-packages/sed_scores_eval/base_modules/cy_detection.cpython-311-darwin.so
Reason: tried: '/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file), '/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file)
実行環境にCの何某かが足りない?
ビルド時の絶対パスを参照しているらしいが,ビルドっていつしたんだ?
uv syncかaddした時かな?
brew install llvmを試す
LLVMはコンパイラの設定とかそういう類らしい?
Mac標準のを使った方が良いとか注意書きがあるが大丈夫だろうか
brew install lld
brewのLLVMのリンカらしい
PATHを通す
echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc
export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
uv run しよう
エラーが出た
code: error
Traceback (most recent call last):
File "/Users/takehonshion/work/iniad/dcase2024_baseline/recipes/dcase2024_task4_baseline/train_pretrained.py", line 15, in <module>
from local.sed_trainer_pretrained import SEDTask4
File "/Users/takehonshion/work/iniad/dcase2024_baseline/recipes/dcase2024_task4_baseline/local/sed_trainer_pretrained.py", line 12, in <module>
import sed_scores_eval
File "/Users/takehonshion/work/iniad/dcase2024_baseline/.venv/lib/python3.11/site-packages/sed_scores_eval/__init__.py", line 4, in <module>
from . import intersection_based
File "/Users/takehonshion/work/iniad/dcase2024_baseline/.venv/lib/python3.11/site-packages/sed_scores_eval/intersection_based/__init__.py", line 1, in <module>
from .intermediate_statistics import accumulated_intermediate_statistics, intermediate_statistics_deltas
File "/Users/takehonshion/work/iniad/dcase2024_baseline/.venv/lib/python3.11/site-packages/sed_scores_eval/intersection_based/intermediate_statistics.py", line 4, in <module>
from sed_scores_eval.base_modules import statistics
File "/Users/takehonshion/work/iniad/dcase2024_baseline/.venv/lib/python3.11/site-packages/sed_scores_eval/base_modules/statistics.py", line 6, in <module>
from sed_scores_eval.base_modules.cy_detection import onset_offset_curves
ImportError: dlopen(/Users/takehonshion/work/iniad/dcase2024_baseline/.venv/lib/python3.11/site-packages/sed_scores_eval/base_modules/cy_detection.cpython-311-darwin.so, 0x0002): Library not loaded: @rpath/libc++.1.dylib
Referenced from: <08B731E6-408B-3383-9F05-04A0C93659A1> /Users/takehonshion/work/iniad/dcase2024_baseline/.venv/lib/python3.11/site-packages/sed_scores_eval/base_modules/cy_detection.cpython-311-darwin.so
Reason: tried: '/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file), '/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file)
やはりビルドし直せば良いらしい
uv pip install --no-binary :all: sed_scores_eval
またエラー
.soのリンク先を直接変えに行く
cd .venv/lib/python3.11/site-packages/sed_scores_eval/base_modules/
install_name_tool \
-change @rpath/libc++.1.dylib /usr/lib/libc++.1.dylib \
cy_detection.cpython-311-darwin.so
直らない
面倒だからvenvを作り直す
よく分からない状態になっているので,最初からやり直そう
uv venv > uv sync
改めてuv run train_pretrained.py --eval_from_checkpoint baseline_pretrained_2024/epoch=259-step=30680.ckpt
またしてもエラー
sed_scores_evalのimport error
sed_scores_eval自体は0.04が入っている
code: error
ImportError: dlopen(/Users/takehonshion/work/iniad/dcase2024_baseline/.venv/lib/python3.11/site-packages/sed_scores_eval/base_modules/cy_detection.cpython-311-darwin.so, 0x0002): Library not loaded: @rpath/libc++.1.dylib
Referenced from: <08B731E6-408B-3383-9F05-04A0C93659A1> /Users/takehonshion/work/iniad/dcase2024_baseline/.venv/lib/python3.11/site-packages/sed_scores_eval/base_modules/cy_detection.cpython-311-darwin.so
Reason: tried: '/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file), '/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/ebbers/Software/anaconda3/lib/libc++.1.dylib' (no such file)
少なくともHomebrewが複数あるからではない
/opt/homebrewだけだった
ls: /usr/local/homebrew: No such file or directory
*/cy_detection.cpython-311-darwin.soの前提になっているlibcはなぜanaconda3のものなのか?
pip install を考えると良さそう
pip installでPyplに問い合わせる?
Wheelがあればそれを使用
別環境でビルドされている
おそらくこれが原因
なければローカルでビルド
つまりWheelがanaconda環境でビルドされているため
この仮定より,--no-binaryで解決するのでは,と提案された
ひとまず,パッケージを共有するためのバイナリフォーマットと理解しておけば良い
sed_scores_evalを動かすための解決策
思いついたのは以下の三つ
anaconda3を使う
Githubからcloneし,ローカルでビルドする
再ビルドする
その前に一度Wheelなしでビルドさせてみる
もう一度 uv pip install --no-binary :all: sed_scores_evalを試す
uv pip uninstall sed_scores_eval --verbose
code: log
DEBUG uv 0.7.12 (dc3fd4647 2025-06-06)
DEBUG Searching for default Python interpreter in virtual environments
DEBUG Found cpython-3.11.13-macos-aarch64-none at /Users/takehonshion/work/iniad/dcase2024_baseline/.venv/bin/python3 (active virtual environment)
Using Python 3.11.13 environment at: /Users/takehonshion/work/iniad/dcase2024_baseline/.venv
DEBUG Acquired lock for /Users/takehonshion/work/iniad/dcase2024_baseline/.venv
DEBUG Uninstalled sed-scores-eval (54 files, 12 directories)
Uninstalled 1 package in 13ms
sed-scores-eval==0.0.4
DEBUG Released lock at /Users/takehonshion/work/iniad/dcase2024_baseline/.venv/.lock
uv pip install --no-binary :all: sed_scores_eval --refresh --strict --verbose > uv_sed_scores_eval.log 2>&1
--refreshはキャッシュを消して実行する
--strictはinstall後になんらかの検証を行うらしい
--verboseは詳細なログを出力
2>&1は標準エラー出力から標準出力に繋ぎかえるリダイレクト
講義資料に説明があったはず
一回目のキャッシュか何かが残ってしまっているみたい?
--no-cacheで実行するか
特に真新しいものはない
最初の標準出力を手動でコピーした
後でみよう
今分かっていないこと
uv add,uv syncが何をやっているか
uv pip install, pip installが何をしているか,パッケージのbuildはいつ行うか
train_pretrainが動かない原因はデータ不足ではなく埋め込み特徴量の不備だと推測
KeyError: 'ph0q4hg1'
エラー全体とコードを見たが,特段問題はなかった
呼び出し先のhdf5ファイルに問題がありそう
一度埋め込み特徴量のファイルを削除してextract~を実行
AssertionError: Torch not compiled with CUDA enabled
CUDAを指定して使っている部分がまだ残っていた
mpsを使うように変更
feats = feats.to('mps' if torch.backends.mps.is_available() else 'cuda')
再実行すると動いた
おそらく不備は修正されたので,train~を再実行
Pytorch Lightningでエラー
code: log
ValueError: You selected an invalid strategy name: strategy='dp'. It must be either a string or an instance of pytorch_lightning.strategies.Strategy. Example choices: auto, ddp, ddp_spawn, deepspeed, ... Find a complete list of options in our documentation at https://lightning.ai おそらくバージョンが異なるせい
推奨はpytorch-lightning==1.9.*
今は2.5.2
バージョンを下げるか,コードを書き換えるか
依存関係が面倒
バージョンは据え置きでいこう
ダメそうなら変える
confs/pretraind.yamlのtraining.backendを dq > ddqに
ddqはmpsに非対応らしい
面倒だからautoにする
モデルとパラメータをfloat32にする
パラメータはfloat32にできた
new_sd[k] = v.to(device=device, dtype=torch.float32)
周辺コードは省略
モデルも変換する
desed_training = desed_training.to(device=device, dtype=torch.float32)
TypeError: h5py objects cannot be pickled
results = trainer.test(desed_training)[0]
Tracebackを見る限り,dataloaderで問題が発生している
torch/utils/data/dataloader.py
multiprocessing
process.py
context.py
popen_spawn_posix.py
popen_fork.py
popen_spawn_posix.py
reduction.py
ここまで考えて,具体的に何が起こっているかはよく分からない
もっと詳細なログを出させるべきか?
Geminiに投げてみる
まさに欲しい説明がきた
便利だな
HDF5がシリアライズできないのでエラーが発出
HDF5はデータを簡便に扱うための形式の一つ
h5pyはHDF5をpythonで処理するためのライブラリ
Pytorch.test()において,DataLoaderは高速な読み込みのため,マルチプロセスな処理を行う
サブプロセスを立ち上げ,データに関する情報を渡す
データに関する情報はdatasetなどのオブジェクトとして扱う
データの情報はpickledして渡す
pickledは情報をバイトストリームにして分割す流
HDF5はpickledできないので,冒頭のエラーが出る
シリアライズできない
バイトに直せない情報がある
datasetを継承して書き換えようと言ってくるが...
果たしてそれで良いのだろうか
今のコードはpl.trainer.test()をそのまま使っている
もし書くならtest()から書き換えるのでは?
一度整理する
h5pyをpickledできるように書き換えたい
どこを書き換えれば良いかよく分からない
多分Geminiの回答は適切ではない
コードを読んでいるがまだ途中だしよく分かってない
LLMとの会話で時間を空費...
目的が間違っているので対話の意味がない
要反省
本当にすべきだったのはローカルのコードを読むこと
SEDTask4でLightningModuleを継承している
このコードでモデルの本体
ここをいじればfloat32対応ができそう
h5py自体はdcase2024_baseline/recipes/dcase2024_task4_baseline/desed_task/dataio/datasets.pyに記述がある
今日は疲労がやばいぞ
明日やるか...
LLM併用で構造を軽く理解しておくか
どこをfloat32にすればいいのか?
もう一度考える
どうしても分からない部分を聞く形で使う
今日中にできるところまでやろう
何もかもMPSが悪い
使いづらすぎない?
CUDAとの互換性のなさよ...
transfer_batch_to_deviceをfloat32に対応
CRNNのadaptive_avg_pool1dをCPU用に書き換え
動いたが,生の評価結果が出力された
精度指標の方で欲しい
コードを読んで出力用のを作るか?
それより途中でevaluationをFalseにした方が早そう
コードを読んであれこれやるより,データのダウンロードを待った方が確実
その間に別のことをやった方が良い
ベースライン以外のコードを見に行こう