Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

2024年3月27日 ML集会 非同期AMI基盤システムα

Avatar for Geson Anko Geson Anko
March 27, 2024
47

2024年3月27日 ML集会 非同期AMI基盤システムα

Avatar for Geson Anko

Geson Anko

March 27, 2024
Tweet

More Decks by Geson Anko

Transcript

  1. 1 ⾃⼰紹介 • げそん (GesonAnko) 𝕏 (Twitter)@GesonAnkoVR • ML集会 主催

    ⾃律機械知能の研究開発 PythonでML関係ツールの作成 VRChatに P-AMI<Q> っていう⾃律機械知能を造ってるよ。 ぱみきゅー
  2. 2 概要 • 深層モデルの学習と推論を ⾮同期に並⾏して⾏う ⾃律機械知能システム(フレームワーク)を実装 • 実時間上で学習しながら動作するAIが構築可能に。 (特にVRChatと相性が良い。) •

    メモリの同期処理は隠蔽。開発を容易かつ安全に。 → 同期処理ラッパークラスを通して使⽤する。 • Pythonで⾮同期システム作るのしんどい。 … しんどい。 制約はある…
  3. 3 ⽬次 1. おさらい 1. ⾃律機械知能 P-AMI<Q>とは 2. 現在動作中のシステムについて 3.

    システムの課題 2. 新システムの Whatʼs New. 3. システムの全体像 4. 実際に動かしてみると 5. 開発の難所 6. Next Step: ⼀緒に作りませんか︖ 7. 資料など ぱみきゅー
  4. 5 ⾃律機械知能 ”P-AMI<Q>” とは︖ 好奇⼼ベースの原始⾃律機械知能 Primitive Autonomous Machine Intelligence based

    on Q(Cu)riosity. 好奇⼼とは、未学習や未探索の領域に向かう性質 バーチャル学会2023 で発表したよ。 VRC Group “VAE.1646” のGroup+インスタンスにいる。 Japan Street をうろついている。 2023年9⽉ 誕⽣ 好奇⼼に従って ワールド上を動き回る。
  5. 7 システムの課題 • 定期的に⽌まる 推論と学習を交互に⾏うため。 • 問題 • 経験の連続性が切れる︓現実の時間進⾏との不⼀致 →

    プランニングアルゴリズムなどに悪影響 • モデルサイズを⼤きくできない︓学習時間が増加 → 停⽌時間も増加 → ⼤規模化は深層モデルの要 • 計算リソースの⾮効率的使⽤
  6. 10 Whatʻs New. 概要 • ⼤きく変わったことは3つ。 1. 処理⼿続き システムがマルチスレッド化 Mainスレッド、Inferenceスレッド、Trainingスレッド

    2. 学習データの収集、使⽤の ⼿続き Inferenceスレッドで集めて、Trainingスレッドで使う 3. モデルの推論と学習 Inferenceスレッドで推論 Trainingスレッドで学習
  7. 11 1. 処理⼿続き インタラクション 起動 推論 VRChatと インタラクション 学習 新システム

    制御 複数スレッドに分岐 終了命令を出すまでそれぞれの スレッドは実⾏し続ける
  8. 12 2. 学習データの収集・使⽤ • 既存システム 1. 空のバッファを⽤意 2. データを N

    個 収集 3. 集めたデータを学習に提供 4. 2に戻る 全て同期的に⾏われるよ。 空の バッファ N個 Buffer 提供 Trainer
  9. 13 2. 学習データの収集・使⽤ • 新システム Data Collector / Data User

    システム • Data Collector (推論スレッド) 1. 空のバッファを⽤意 2. データを集める。(無限ループ) … ?. Userに渡したら新しい空のバッ ファにセット • Data User (学習スレッド) 1. 空のバッファを⽤意 2. データを Collectorから受け取る この時 Collectorに空のバッファをセット 3. 古いバッファと結合 4. 学習処理へ提供 5. 2へ戻る。 推論 スレッド 学習 スレッド Buffer 移動 Buffer 空の バッファ Old Buffer + 同期 処理
  10. 14 2. 学習データの収集・使⽤ • Re-constructable Class 「空のバッファが必要なら、新しく作り直せば 良いではないか。」 • コンストラクタをラップ

    • 引数をディープコピーして保存 • `new()` で新規バッファ を⽣成 • 引数にでかいオブジェクト渡すとメモリコ ピーがヤバい。 • そもそもコンストラクタが重い場合ヤバい… ⽤法を守って安全に使えばとっても便利︕
  11. 15 3. モデルの推論と学習 • ⼤枠 学習スレッド⽤モデル、推論スレッド⽤モデルが存在する。 1. 学習スレッドでパラメータを更新 2. 推論スレッドのモデルと同期(⾼速に)

    推論⽤ モデル 学習⽤ モデル 同期 • 同期⽅式︓内部モデルスイッチング ラッパークラスを介してモデルを扱う。 推論ラッパー モデルラッパー モデル モデル Switching スイッチ後、推論⽤モデルから学習⽤モデルにパラメータコピー ⼤きい深層モデルのコピーには時間がかかる。推論スレッドを待たせないため。
  12. 17 その他 新機能 • システムの⼀時停⽌、再開 • Web API でシステム制御(by ゆんたん)

    • スレッド毎のログ分離 • Mypyでちゃんと型チェック⼊れる。 • 厳密な型チェック(strict) モード • ついにGenericsを導⼊した。 • などなど…
  13. • ダミータスク 画像 VAE の推論と学習。 Decoderは推論に⽤いない。 • 推論スレッド • 適当に⽣成した画像をEncoderで圧縮

    (10 FPS) • 画像をバッファに保存 • 学習スレッド • バッファがバッチサイズ以上溜まったら 1 epoch 学習 (インターバル無し) • モデル CNN, ⽐較的⼩規模なモデル ( ~ 300万パラメータ) 19 実際に動かしてみると︓設定 Decoder Encoder Variational AutoEncoder Input
  14. 21 実際に動かしてみると︓リソース使⽤量 • Desktop PC • CPU: 10% ほど(Intel Core

    i7 14700KF) • GPU: 40~50% ほど(NVIDIA RTX 4090) • Laptop PC MacBook Pro, M3 Chip. • CPU: 100%︕(4E + 4P core) • GPU: 100% ! (10 core) 推論と学習が常に同時実⾏されているので、スペックは必要。 さらに デスクトップモードの VRChatが…
  15. 23 開発の難所 • ⾮同期処理の隠蔽 ガチガチにフレームワーク化した • 同期Lockのかけ忘れを防ぐため。 • 設計は ほぼMyxyさんだけとやった。

    • ⾮同期システム特有の設計を理解してもらうのが難しい。 • 経験や知識のある少⼈数で設計しないとカオス化する • mypy(静的型チェッカー) • ⾮同期システムを堅牢に作るため。 • 厳密な型チェックを有効化したので そこそこ⾟かった。 Reconstructableにした Data Bufferクラスは 未だに納得いってない。
  16. 25 Next Step: To Do. • 既存実装の引き継ぎ • Environment (Sensor,

    Actuator) • Models • Data Buffers • Agent • Trainers • システムの状態セーブ・ロード機能 • モデルパラメータ、オブジェクトの状態情報 • 学習記録の可視化 • TensorBoard, MLFlowなど
  17. EOF