🐕

[週次報告] 第2回 Team たぬき

2024/04/08に公開

松尾研LLM開発プロジェクト*1 たぬきチームの週次報告です。

*8チームに分かれ、各チームで大規模言語モデルをフルスクラッチで作りその性能を競います。最終的には500億パラメータサイズの大規模言語モデル開発することを目的としています。LLM開発プロジェクトの裾野を広げるという教育的要素もあるプロジェクトです。

開発テーマ・概要

  • 日本語指示データセットの収集、事前学習データセットの作成、モデルの事前処理・学習・評価のパイプライン実装などを行っている。
  • 誰でも開発に参画できるように可能な限りオープンに開発を進めている。
  • サイドプロジェクトとしてファインチューニングに必要な日本語の指示データセットの作成を行なっている。(詳細はこちらの note 記事参照 https://note.com/kan_hatakeyama/n/n02201c8692f5)
  • コアとなる部分は「Branch-Train-Merge x 混合エキスパート」を利用予定。

チーム全体の開発状況

  • 現在、以下のチームに分かれて並行して作業を進めている
    1. 指示データセット:Insturuction Tuning用データセット収集・加工・作成
    2. 事前学習データセット:事前学習に用いるデータセットの収集・加工を行う班
    3. Code:チーム用のコード構築、コード実行時の計算量や所要時間予測
    4. 遊撃班:プロジェクトに必要な様々なことを実行
  • 各サブチームが着実に進捗を上げている。データセットの収集・作成、モデルの学習・評価の練習が行われている。

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

  1. 指示データセット
    • タスクカテゴリの作成と日本語指示データセット収集Webページの作成が完了。
    • 追加機能要望として、ランダムタスク提案、サンプル回答表示、LLMによる入力サポートが挙げられた。
  2. 事前学習データセット
    • CommonCrawlから日本語データの抽出を行った。
    • アノテーションアプリを作成し、良質な日本語テキストの選別を行う予定。
    • 複数のリソースを活用し、効率的にデータセットを作成できることがわかった。
  3. Code

ディスカッション:

  • Branch-Train-Mergeのデータセット配分について議論があり、事前学習データは尖らせず、ファインチューニングで個性を出すのが良いかもしれないという意見が出た。
  • インストラクションには2ターンが必要だと考えられている。

TODO:

  1. 指示データセット
    • 現状のQAフォームへタスクリストを反映する。
    • LLMによる入力サポート機能の調査・実装検討を行う。
  2. 事前学習データセット
    • 注力するデータセットを決定する(peS2o, Wiki books + CommonCrawl pdfデータ, コーディングデータセット, 英語データセットなど)。
  3. Code
    • ファインチューニング条件が評価指標に与える影響を検証する。
  4. 全体
    • Branch-Train-Mergeのデータセット配分を決定する。

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

サブチーム1: 指示データセット

やったこと

  • タスクカテゴリの作成
  • 日本語指示データセット収集Webページの作成 (shu)

分かったこと

  • 不十分なタスクがあるため適宜追加していく必要性。
  • 追加機能要望
    • ランダムにタスクを提案機能
    • サンプル回答の表示
    • (可能なら) LLMによる入力サポート機能

次やること

  • 現状のQAフォームへタスクリストを反映
  • LLMによる入力サポート機能の調査実装

サブチーム2: 事前学習データセット

やったこと
1)CommonCrawl 1snapshot 日本語データ抽出 (wet)
Webテキストのデータが集められているCommonCrawlからデータをダウンロードし, 日本語のデータの抽出を行った.
CommonCrawlデータのバージョン(snapshot)の1つを処理

2)アノテーションアプリ作成
良質的な日本語テキストを人間基準でアノテーションし, 学習させる際の最後に使うようにする

分かったこと
1)Dataflowというサービスがすごい
暫定360時間程度必要な加工を9時間で終わらせることが可能
→山田さんにより供与いただいた

2)huggingface datasets ローカルPCでも作成可能
これまでは大容量なPCで加工結果を集めてuploadという流れ
しかし, 今回はGoogle Colab2つ, ローカルPC1つ, GCP GCEインスタンス1つにより分割してhuggingface datasetsを作成! (1つのリソースでやるより1/4の時間でできた)
→どんどん, データセットを作ろう!

次やること
※注力するデータセット決めたい
1)peS2o
allenai/peS2o: Pretraining Efficiently on S2ORC! (github.com)
2)Wiki books + CommonCrawl pdfデータ
3)コーディングデータセット
4)英語データセット

サブチーム3: Code

やったこと

  • 事前処理、事前学習、ファインチューニング、評価のパイプライン実装
  • 2.7b, 30b tokenでの学習の練習
  • perplexityによるexpertモデルの切り替え練習

分かったこと

  • 各種処理に要する時間の目安
    • 前処理
      • データダウンロード:1 day
      • 清掃: 1 day
      • dedup: 1 day (c実装 & データ分割などの工夫をしたうえで。)
      • tokenize: 半日
    • 事前学習
      • 1 day for 2.7b, 30b token

次やること

  • ファインチューニング条件が評価指標に与える影響の検証

Discussion