💨

[週次報告] 第6回 Team JINIAC (5月2日)

2024/05/14に公開
  • チーム名:JINIAC
  • 日時:2024年 5月2日
  • 参加者:
    • リーダー:中村 仁
    • 遊撃隊 :岡修平、kamada
    • サブリーダー:nakashi104、佐野敏幸
    • 開発リーダー:白石尽誠
    • コアメンバー:菊池満帆

1. 開発テーマ・概要

記載者: 中村 仁

  • 本プロジェクトでは、日本語の特性を適切に捉えられる大規模言語モデル(LLM)の開発を目指します。

  • この目標達成に向けて、以下の3つの領域に対し、重点的に注力しております。

    1. データセット
      • 良質な日本語データセットの構築が日本語理解の質を大きく左右する。
      • 本プロジェクトでは以下のデータを収集し、最適化を図る。
        • 政府文書
          • 国会答弁
        • 学術論文
        • 知識転移を見据えた独自データセット
          • ヒンディー語
    2. モデル構造
      • Mixtures of Experts(MoE)を活用する。
    3. 学習手法
      • データの学習順序の変更等の導入により、モデルの理解力向上を目指す。
  • 加えて、以下のプロジェクト運営面での工夫も行っています。

    • トップダウンとボトムアップの両立
    • Notionを活用したプロジェクト管理の最適化
    • チームメンバーの心理的安全性の確保
    • コミュニケーションの活性化
  • プロジェクトの目標を達成できれば、以下の成果が期待できると考えています。

    1. チームメンバーによる共同執筆での論文発表
    2. NoteやGitHubを通じた積極的な情報公開とLLM人材の育成
  • 日本が世界に誇れるAI技術を持つためには、日本語の豊かな表現を捉えられるLLMの実現が不可欠です。

  • 本プロジェクトはその実現に向け、全力を尽くしてまいります。

2. チーム全体の開発状況

記載者: 中村 仁

  • チーム組成が完了し、各サブチームにおける本格的な開発が開始しました。

  • 経済産業省・NEDOにより「本番環境」が提供されるまでの期間に提供される「プレ環境」において、大規模モデル開発開始のための準備を進めて参りました。

    • データ班により、従来のデータセットよりも高品質なデータセットが準備されつつあります。
    • モデル班により、モデルの選定と実装、シングルノードでの実行確認が行われました。マルチノードでの実行検証が進行中です。
    • 学習班により、インフラ周りのセッティングが行われました。評価班の発足が進行中です。
  • 2024年4月22日(月)経済産業省・NEDOにより「本番環境」が提供されました。

    • 本番環境の時間を無駄にしないため、「本番環境」提供後の3~4日間については次の方針を定め、開発を進めて参りました。
      • 標準コードの事前学習を実行する
        1. 概要
          1. (当初)データチーム、モデルチーム、学習チームからの少人数の「遊撃隊」を組成し、松尾研から提供されている「標準コード」を事前学習させる
        2. 期間
          1. 4月22日(月)~ 5月10日(金)
            1. (2024年5月2日現在)当初4月25日(木)までの予定であったが、MoEのマルチノードの実行時におけるNCCLエラーを解消することができていないため、5月10日(金)まで継続と変更
        3. 目的
          1. 「プレ環境」において行うことができなったマルチノードでの実行を確認する必要があるため
          2. 標準コードを学習させておくことで、本命のMoEにおける学習がうまくいかなかった際、継続事前学習を実行するセーフティネットとしての活用できるようにしておくため
          3. Google Cloudの特性を把握し、本線での学習をスムーズに行うための知見を収集するため
        4. 流れ
          1. (完了)本番環境へのログイン、実行までの手順の確認
          2. (完了)標準コード実行のための環境構築
          3. (完了)標準コード学習に必要なデータの転送
          4. (完了)マルチノードでの実行確認
          5. (完了)実行確認後のモデルのHuggingfaceへのアップロードテスト
          6. 後述する理由から、提供されている3ノード中の2ノードでの学習を継続
    • 標準コードの事前学習の後、MoEの事前学習を実行する
      1. モデルをDeepSeekMoEに定め、4月25日(木)までを目標としていた実装が完了
      2. 終わり次第、実行したが、マルチノードでのエラーが発生
      3. エラー解決のため、提供されている3ノード中の1ノードを用いて解消中
  • wandb等、学習をモニタリングするツール等についての勉強会や、トークナイザーに関する勉強会も行っています。その他、有志での勉強会や調査会も行われています。

    • GitHub等の準備についても順調に進んでおり、安定した開発を行えるよう準備中です。
    • wandbとSlackの連帯等、本番環境のメンテナンス対応についても同時に進行中です。
  • 現在行うべき課題については順調に対処できていますが、モデルの実装に遅れがみられているため、標準コードの事前学習を少し長引かせる等で対処して参りたいと考えています。

  • 開発とは別に、各サブチームにおける活動をサポートし、チーム全体としての調整をする活動も行っています。

    • 次のマネジメントチームの発足させました。
      1. 情報調査チーム
        1. 情報収集、情報分析、情報の可視化
      2. 外務チーム
        1. 情報の発信、文書の公開範囲設定
      3. 内務チーム
        1. チーム内の方(及びチームへ加入される予定の方)に対するマネジメント、勉強会の調整
  • マネジメントチームにより、Notionにおける情報管理や、コミュニティメンバーの加入についてのフローがほぼ確立しました。

    • 新しいメンバー4名の受け入れやについても順調に進み、40名ほどのメンバーが各々の興味に基づいて開発できる環境の整備を進めています。
  • 新しいメンバー4名の受け入れやについても順調に進み、内部での調整や、外部との連絡についても順調に進んでいます。

    • ヒンディー語のデータセット構築の際には、大阪大学大学院人文学研究科の虫賀幹華先生によるご協力を賜りつつ、構築を進めています。
  • スケジュール:

    • 5月10日(金)までに、MoEにおけるマルチノードでの学習を実行できるようにする。
    • これがかなわない場合は、標準コードへ移行する。

3. サブチームからの情報共有

3.1 遊撃隊(本番環境初動対応チーム)

遊撃隊は、本番環境が提供された後の数日のために結成した初動対応チームです。

データの転送や、環境構築、本命のモデルであるDeepSeekMoEがうまく学習されなかった場合のセーフティネットとして用いるコードの事前学習を行っていただきました。

各班から以下のメンバーにお願いしました。

データ班:

  • 堀江吏将

モデル班:

  • 摂待陽生、岡修平

学習班:

  • 恩田直登、kamada

記入者:堀江吏将

3.1.1 やったこと

  • 本番環境に標準コードが実装できる環境を構築
  • 処理速度を優先したモデルサイズの選定
    • 標準コードをセーフティーネットとしていつでも稼働できるよう、学習速度を優先して選定した。
  • 標準コードが、マルチノードマルチGPUで実行できるかの検証

3.1.2 分かったこと

  • プレ環境での準備ができている部分については、問題なく実装できた。
  • 一方、プレ環境で確認できなかった、マルチノードの実装に関しては時間を要した。
    • 特に、ノード間の同期に関するssh設定に苦労した。

3.1.3 次やること

  • 実行監視(正式な班が組成されるまで)
  • セーフティーネットの事前学習(GPUの空き時間を活用)
  • 本番で実施するコードに関して、初期トラブル対応補助
    • ログの提供
    • エラー原因の推定

3.2 データ班

記載者:  佐野敏幸,元谷崇

3.1.1 やったこと

  • 使えそうなマルチターンデータセットの整理。
  • 事前学習用のcodeデータの準備。
  • 本番投入事前学習データセットについての計画 (JINIACブレンド)を策定。
  • 事後学習用に文部科学省の学習指導要領データを準備。

3.1.2 分かったこと

  • 今回のコンペで使用できそうなデータセットを選定し、一覧にまとめた。
  • 事前学習用のcodeデータは、個人情報削除が必要。
  • JINIACブレンドについておおよそ策定できた。
  • 学習指導要領データは、綺麗な日本語が多いことが分かった。

3.1.3 次やること

  • 話題が多様かつ品質が高いと思われるデータ(表中で優先度:高のデータ)を精査・変換していく。
  • 事前学習用のcodeデータの準備。特に個人情報の除去。
  • 事後学習用のデータを用意し、事後学習の評価を回す体制を整える。
  • 事後学習用は、質問と問いの関係とするか、形式を確認する。

3.3 学習・コード班

記載者: @Shoji Iwanaga

3.2.1 やったこと

  • モデル評価組の決定
  • 学習の推移監視要員の決定
    • アラートをSlackに送る。
  • ファインチューニング要員の決定

3.2.2 分かったこと

  • MoEではファインチューニングできないため、コンストラクションチューニングがメインなりそう。
  • エラーが起きた場合に、対応できる人に偏りがある。
    • マニュアルあるいはドキュメントが必要

3.2.3 次やること

  • 評価手順の確立
    • 任意のタイミングで評価し分析
  • 松尾研が提示している評価項目以外のものを調べる。
  • プロジェクト管理用のNotionページの作成
  • ファインチューニングの詳細を詰める。

3.4 モデル班

記載者: 白石尽誠

3.3.1 やったこと

  • MoEモデルを本番環境で動作させた.
    • 予備実験で,マルチノードでの検証を確認した.
  • 事前学習本番を開始.

3.3.2 分かったこと

  • 予備実験
    • メモリや速度を考慮すると,5B程度が限界(今回はモデル構造の都合などもあり,3D parallelism不使用).
    • 最終的にDeepSeekMoEの5Bの構成を採用.
    • 小規模なデータセットで,マルチノードで学習できることを確認.3ノードは1ノードの約2倍.
  • 学習本番
    • データセット一塊を処理しようとして,OOMになる→分割することで対応(継続事前学習の繰り返しのようになってしまった).
      • 対処法を検討中.
    • データセットを分割したはいいが,tokenizeやgroupingの処理でエラーが発生.
      • マルチノードで処理すると,なぜかNCCLエラーが出る.原因究明中.
      • そうはいっても時間がないので,tokenizeやgroupingだけシングルノードシングルGPUでして,キャッシュを作成する方針に
      • datasetのmap処理でnum_procを入れてるとエラーになるよう
      • 予備実験でうまくいったのは,すでに作成されたキャッシュを使用していたからか?
    • tokenizeやgroupingだけシングルノードシングルGPUでして,キャッシュを作成する,mapのnum_procを抜く→シングルノードで学習まで到達(ただし処理に時間がかかる)
      • 学習自体は今の所順調.lossは3前後まで加工,spikeなどはなし.

3.3.3 次やること

  • マルチノードでの学習を再開する.
  • データの確実かつ効率的な処理方法を検討する.

4.ディスカッション

  • 特になし

5. 開発のマイルストーン

  1. データ準備 記載者: nakashi104

    • 事前学習
      • データとして以下のデータを準備

        • 日本語

          CommonCrawlPDFJa

          japanese2010

          wikipedia-20240101

          CulturaX

          国会議事録

          法律データ

          判例データ(ja)

          青空文庫

          Syosetu711K (使わない想定)

        • 英語

          open-web-math

          Slimpajama (現在学習中)

          JINIAC/en_wiki_20220301

          loubnabnl/github-code-more-filtering(準備中)

        • ヒンディー

      • 現在Slimpajamaを学習中

      • 次の学習データに関して議論中

        • データの学習順序のモデル精度への寄与を考慮
    • 事後学習
      • 事後学習に必要なデータ量を見積もり
      • 事後学習データセットに関してはメンバーが特色あるデータセットを各々用意しています.
  2. モデル学習コード準備

    記載者: 佐野敏幸

    • DeepSeekMoEを実装した。
    • セーフティネットの1つとしてMixtralも用意した。
  3. シングルGPUでの稼働確認、実績

    記載者: 堀江吏将

    • DeepSeekMoE、標準コードともに稼働確認済。
    • ただし、処理時間とphase1の残り時間を考えると、採用は困難。
  4. マルチノードでの稼働確認、実績

    記載者:堀江吏将

    • 標準コードについては、14日程度の事前学習で終了の見込みが立った。
  5. うまくいきそうか計画の確信度

    記載者:中村 仁

    • 本命のDeepSeekMoEを用いた場合での達成確率は不透明であるが、メンバーの強い頑張りにより、解決へと進行していると確信している。
    • 標準コードにおける学習完了までの道筋は見えており、セーフティネットの構築達成への確信度は高い。

6.その他

  • 特になし

7.直近1週間でやったこと

記載者: 中村 仁

  • 事後学習に用いるデータセットの準備が進行中です。
  • NEDOからご提供いただいた「本番環境」にて、標準コードを段階的にスケールさせる実験が進行中です。
  • DeepSeekMoEのマルチノード実行に際したエラーの対処と、標準コードの並行した学習が進行中です。

Discussion