1.5K Views
November 05, 24
スライド概要
本プロジェクトは、当研究室が提供する講座の修了生および一般公募によって集まった有志の開発者のメンバーが500億パラメータサイズの大規模言語モデル開発を進めるものです。
Phase1では、7チームに分かれて複数の研究テーマを設定し探索を行い、知見を共有しながら試行錯誤することで、実用的かつ効率的な手法を採用しました。その後Phase2では、コンペで最優秀に選ばれた1チームが500億パラメータサイズのLLM開発に取り組みました。
なお、本プロジェクトは国立研究開発法人新エネルギー・産業技術総合開発機構(NEDO)による、国内の生成AIの開発力を強化するためのプロジェクト「GENIAC(Generative AI Accelerator Challenge)」において、基盤モデル開発に必要な計算資源の提供支援を受けています。
9/10(火) 20:00~22:00
・開発リーダー:畠山さん
9/17(火) 20:00~22:00
・開発メンバー:林寛太さん、Mさん、N.Kさん
9/24(火) 20:00~22:00
・開発メンバー:Susumu Otaさん、白石尽誠(Jinsei Shiraishi)さん、山口裕輝さん
▼参考:NEDOの採択を受け、公開型での500億パラメータサイズの大規模言語モデル開発を開始します。
https://weblab.t.u-tokyo.ac.jp/2024-02-02/
▼参考:「GENIAC」プロジェクトの詳細はこちら
https://www.meti.go.jp/policy/mono_info_service/geniac/index.html
東京大学松尾・研究室が運営する「松尾研LLMコミュニティ」でのイベント資料などを公開します。 ◾️ 松尾研LLMコミュニティとは 松尾研LLMコミュニティは、「大規模言語モデルについて知って学べるオンライン空間」として、東京大学松尾・岩澤研究室が運営するコミュニティです。 現在、学生を中心とした7800名以上が、原則無償で参加しています。 また、本コミュニティでは様々なイベント等を定期的に開催しております。 是非下記のリンクより参加申し込みをお待ちしております。 ◾️ 松尾研LLMコミュニティの各種リンク ・今後のイベント開催情報/参加申込;https://tr.ee/7d_W4DsImD ・松尾研LLMコミュニティ参加フォーム;https://tr.ee/RyDfuRzS55 ・過去イベントアーカイブ;https://tr.ee/wqdbFJJZ25
LLM開発 プロジェクト 開発報告会 チームたぬき “Tanuki-8×8B” Vol.3 Susumu Ota, Jinsei Shiraishi, 山口裕輝(チームたぬき 開発メンバー), 東京大学 松尾・岩澤研究室 LLM Community 2024/9/24
Persona-Hub による合成データ⽣成 9/24 松尾研LLM開発プロジェクト “Tanuki-8x8B” 開発成果報告会 Vol. 3 Susumu Ota 2024-09-24
⽬次 • ⾃⼰紹介 • 合成データの重要性 • Persona-Hub による合成データ⽣成 • ⽇本語ペルソナデータによる合成データ⽣成 • マルチターン合成データ⽣成のポイント • ペルソナデータ研究 最近の状況 • 今後の課題 • まとめ 2
⽬次 • ⾃⼰紹介 • 合成データの重要性 • Persona-Hub による合成データ⽣成 • ⽇本語ペルソナデータによる合成データ⽣成 • マルチターン合成データ⽣成のポイント • ペルソナデータ研究 最近の状況 • 今後の課題 • まとめ 3
⾃⼰紹介 • Susumu Ota • フリーランスエンジニア • 東京⼯科⼤学⾮常勤講師 • 分野: ⾃然⾔語処理・強化学習 • 第4回全脳アーキテクチャハッカソン, 最優秀賞 (2018年) • The Animal-AI Olympics 2019, カテゴ リー7賞 (2019年) →右図 • 最近の興味: ⼈⼿作業を最⼩限に抑 えたスケーラブルなLLM開発 • LLMによる合成データ⽣成 • LLMによるデータのスコア付け Benjamin Beyret et al., “Animal-AI 2.0.0”, アクセス⽇: 2024-09-23 https://github.com/beyretb/AnimalAI-Olympics 4
⽬次 • ⾃⼰紹介 • 合成データの重要性 • Persona-Hub による合成データ⽣成 • ⽇本語ペルソナデータによる合成データ⽣成 • マルチターン合成データ⽣成のポイント • ペルソナデータ研究 最近の状況 • 今後の課題 • まとめ 5
合成データの重要性 • 畠⼭先⽣の開発成果報告会 資料より • “合成データの投⼊までJMTBenchのスコアは横ばい” (左 上図) • “性能向上にあたっては、合成 データの活⽤が重要であっ た。” (左下図) Kan Hatakeyama, “⼤規模⾔語モデルTanuki-8x8Bの紹介と開発経緯など”, 9/10 松尾研LLM開発プロジェクト “Tanuki-8x8B” 開発成果報告会 Vol.1, 発表資料より引⽤。 53ページ, 113ページ 6
合成データで苦⼿なカテゴリを克服 論理・コード・数学 • 畠⼭先⽣の開発成果報告会資料 より • “マルチターン、数学、論理、コー ド、⼀部の出⼒指定型のタスクで スコアが伸び悩み” (左図) • Phase2後半の⾃分の担当 • Nemotron-4-340B推論環境の整備 • 論理・コード・数学のスコアを上 げるためのSFT・DPO⽤合成デー タの作成 • Persona-Hub • Iterative DPO • 使⽤LLM: Nemotron、Calm3 • Ask-LLMによる合成データスコア 付け Kan Hatakeyama, “⼤規模⾔語モデルTanuki-8x8Bの紹介と開発経緯など”, 9/10 松尾研LLM開発プロジェクト “Tanuki-8x8B” 開発成果報告会 Vol.1, 発表資料より引⽤。 122ページ 7
合成データ作成の難しさ • 品質(quality)とカバレッジ(coverage, 網羅率)のトレードオフ • ⼈⼿データ作成の場合 品質 • コスト⼀定ではどちらかを犠牲にせざるを 得ない • LLMを使った合成データ⽣成の場合 • 品質は、既存LLMの性能向上と推論コス ト低下で時間とともに(⾃動的に)向上 • カバレッジを増やすことが難しい • →何らかのヒント・種をLLMに与えて カバレッジを広げる必要がある カバレッジ 8
ルールベースとLLMベースの⽐較 • ルールベースで合成データ⽣成 • 正規表現・テンプレート・アルゴリズムを⼈⼿で作成してデータを⽣成 • 狙い通りのデータは⽐較的容易に⽣成可能 (例: 算数の計算問題) • 表現の範囲が狭い(カバレッジが低い) • LLMで合成データ作成 • プロンプトを⼈⼿で作成してLLMでデータを⽣成 • 狙い通りのデータ⽣成をプロンプトで調整することが難しい • 温度パラメータによって表現のバリエーションを増やすことが可能 (た だし、温度を上げすぎるとハルシネーションや⽂が破綻する可能性) • 固定のプロンプトではカバレッジの広がりは限定的 • →ヒント・種をLLMに与えてカバレッジを広げる⼿法が必要 9
⽬次 • ⾃⼰紹介 • 合成データの重要性 • Persona-Hub による合成データ⽣成 • ⽇本語ペルソナデータによる合成データ⽣成 • マルチターン合成データ⽣成のポイント • ペルソナデータ研究 最近の状況 • 今後の課題 • まとめ 10
Persona-Hub による合成データ⽣成 • 背景 • 既存の合成データ⽣成⼿法(インスタンス駆動・キーポイント駆動)では合成 データの多様さをスケールアップすることが困難 • ⽬的 • ⼤規模なペルソナコレクションを使ってスケーラブルな合成データを⽣成す る (ペルソナ駆動) • ペルソナとは • 職業・趣味・興味・性格・年齢・性別など Xin Chan et al., "Scaling Synthetic Data Creation with 1,000,000,000 Personas”, arXiv preprint arXiv:2406.20094v1, 2024. https://arxiv.org/abs/2406.20094 11
Persona-Hub による合成データ⽣成 • ⽅法 (プロンプト) • Create a math problem with a moving company driver • Create a math problem with a chemical kinetics researcher • Create a math problem with a musician interested in audio processing Xin Chan et al., "Scaling Synthetic Data Creation with 1,000,000,000 Personas”, arXiv preprint arXiv:2406.20094v1, 2024. https://arxiv.org/abs/2406.20094 12
Persona-Hub による合成データ⽣成 • Persona-Hub データを本プロジェクトに適⽤する際の問題点 • ペルソナデータのライセンス: CC-BY-NC-SA-4.0 • ⾔語: 英語と中国語 • ⽇本語ペルソナデータを⾃作 • まず職業にフォーカス • ⼤規模コーパスからの⾃動⽣成はリソースや時間的に難しかったので 今回は⾼品質の⼈⼿作成データを探すことにした • ⽇本語の職業データ • 厚⽣労働省の公開資料「賃⾦構造基本統計調査の新職種区分案」 • Wikipedia の項⽬「職業⼀覧」(CC-BY-SA-4.0) • 上記をマージして⼀部⼿作業で修正 • 合計1066件 →次ページに抜粋を⽰す 厚⽣労働省, ”賃⾦構造基本統計調査の新職種区分案”,アクセス⽇: 2024-09-23, https://www.mhlw.go.jp/content/10700000/000513179.pdf Wikipedia, “職業⼀覧”,アクセス⽇: 2024-09-23, https://ja.wikipedia.org/wiki/%E8%81%B7%E6%A5%AD%E4%B8%80%E8%A6%A7 13
作成した⽇本語ペルソナデータ(抜粋) • 合計1066件 [NEDO 採択プロジェクト] 多様な⽇本語能⼒の向上を⽬指した公開の基盤モデル開発, コードレポジトリ,アクセス⽇: 2024-09-23, https://github.com/matsuolab/nedo_project_code/blob/team_hatakeyama_phase2/team_hatakeyama_phase2/ota/topic-hub/persona_jp.jsonl 14
⽇本語ペルソナデータによる合成データ
• プロンプト
• 右図参照
• task例
• 数学
• persona例
• 潜⽔⼠
• Note以下
Create a {task} problem related to the following persona:
{persona}
Note:
1. The {task} problem should be simple and involve basic {task} skills
and knowledge. Any average grade school student can solve it correctly.
2. You should make full use of the persona description to create the
{task} problem to ensure that the {task} problem is unique and specific
to the persona.
3. Your response should always start with "問題:". Your response
should not include a solution to the created {task} problem.
4. 簡潔に⽇本語で回答してください。
• 問題やペルソナに
関するデータを作
成するよう指⽰
• 難易度を指定
• 問題だけを切り出
しやすくする指⽰
• 解答を含まないよ
う指⽰
[NEDO 採択プロジェクト] 多様な⽇本語能⼒の向上を⽬指した公開の基盤モデル開発, コードレポジトリ,アクセス⽇: 2024-09-23,
https://github.com/matsuolab/nedo_project_code/blob/team_hatakeyama_phase2/team_hatakeyama_phase2/ota/topic-hub/synth_topic_multiturn.py 15
合成データ例 (Q1) • task: 数学 • persona: 潜⽔⼠ • 前ページのプロンプトを使って⽣成 • ⽣成データ(Q1): 潜⽔⼠が深さ30メートルの海底に到達するために、 潜⽔を開始しました。潜⽔⼠は毎分5メートルの速さで降りることがで きます。潜⽔⼠が海底に到達するのにかかる時間を計算しなさい。 • 上記⽣成データをQ1として、Q1をプロンプトとしてA1を⽣成 • →次ページ [NEDO 採択プロジェクト] 多様な⽇本語能⼒の向上を⽬指した公開の基盤モデル開発, データセット, (準備中), https://huggingface.co/datasets/team-hatakeyama-phase2/synth-topic-jp-basic-math-calm3 16
合成データ例 (マルチターンQ&A) • Q1: 潜⽔⼠が深さ30メートルの海底に到達するために、潜⽔を開始 しました。潜⽔⼠は毎分5メートルの速さで降りることができます。 潜⽔⼠が海底に到達するのにかかる時間を計算しなさい。 • A1: 潜⽔⼠が深さ30メートルの海底に到達するためには、毎分5メー トルの速さで降下します。この場合の時間は、30メートルを5メー トル毎分で割ることで求められます。したがって、30 ÷ 5 = 6分と なりますので、潜⽔⼠が海底に到達するのには6分かかります。 • Q2: 潜⽔⼠の速度が毎分3メートルに変わった場合、深さ20メートル の海底に到達する時間はどれくらいかかりますか? • A2: 潜⽔⼠の速度が毎分3メートルに変わった場合でも、同様に20 メートルを毎分3メートルで割れば時間がわかります。従って、20 ÷ 3 ≈ 6.67分となり、およそ6分40秒かかると計算されます。 [NEDO 採択プロジェクト] 多様な⽇本語能⼒の向上を⽬指した公開の基盤モデル開発, データセット, (準備中), https://huggingface.co/datasets/team-hatakeyama-phase2/synth-topic-jp-basic-math-calm3 17
マルチターン合成Q&Aデータ⽣成のポイント • 適切なQ2を⽣成するのが難しい • ⼯夫しないとQ1の内容とは関係ない別の問題を作成してしまう • Q2を⽣成する際のプロンプト • user: {Q1の内容} • assistant: {A1の内容} • user: 前述の問題をより理解するために、簡潔な追加の質問を⼀つ作り なさい。問題の⼀部を変更したり、条件を追加しても良いです。追加 の質問だけを書き、決して答えを含めないでください。 • 上記出⼒結果をQ2とする [NEDO 採択プロジェクト] 多様な⽇本語能⼒の向上を⽬指した公開の基盤モデル開発, コードレポジトリ,アクセス⽇: 2024-09-23, https://github.com/matsuolab/nedo_project_code/blob/team_hatakeyama_phase2/team_hatakeyama_phase2/ota/topic-hub/synth_topic_multiturn.py 18
ペルソナデータによる成果 • Tanuki-8x8B の最終版モデルは様々なSFT・DPOデータを学習 させ、JMT-Benchの最もスコアの⾼かったモデルを最終版とし て採⽤ • Tanuki-8x8B で最もスコアの⾼かったモデルはペルソナデータ による合成データを元にDPOしたモデル • 特にreasoning(論理推論)カテゴリではトップスコア 19
同様の⼿法で作成したマルチターン合成データ (準備中) • 基礎的な数学 (ペルソナ) • https://huggingface.co/datasets/team-hatakeyama-phase2/synth-topic-jp-basic-math-calm3 • 基礎的な論理推論 (ペルソナ) • https://huggingface.co/datasets/team-hatakeyama-phase2/synth-topic-jp-basic-reasoning-calm3 • 論理推論 (キーポイント) • https://huggingface.co/datasets/team-hatakeyama-phase2/synth-topic-jp-reasoning-nemotron-4 • https://huggingface.co/datasets/team-hatakeyama-phase2/synth-topic-jp-reasoning-calm3 • ⾼校数学 (キーポイント) • https://huggingface.co/datasets/team-hatakeyama-phase2/synth-topic-jp-highschoolmath-nemotron-4 • 数学 (ペルソナ) • https://huggingface.co/datasets/team-hatakeyama-phase2/synth-persona-jp-math-nemotron-4 • 論理推論 (ペルソナ) • https://huggingface.co/datasets/team-hatakeyama-phase2/synth-persona-jp-reasoning-nemotron-4 • コーディング (キーポイント) • https://huggingface.co/datasets/team-hatakeyama-phase2/synth-topic-jp-coding-calm3 • キーポイント⼿法: 前述のプロンプトのペルソナ部分をキーポイント(既存⼿法)に置き換えて⽣成 20
⽬次 • ⾃⼰紹介 • 合成データの重要性 • Persona-Hub による合成データ⽣成 • ⽇本語ペルソナデータによる合成データ⽣成 • マルチターン合成データ⽣成のポイント • ペルソナデータ研究 最近の状況 • 今後の課題 • まとめ 21
参考: ペルソナデータ研究 最近の状況 • FinePersonas • Argillaが2024年9⽉にリリース • ライセンス: Llama3 • “Open dataset of 21 Million detailed personas for diverse and controllable synthetic text generation.” • FineWeb-Edu のWebページから抽出されたペルソナデータ •例 • A network engineer with a focus on routing protocols and preparing for Cisco certification exams, particularly CCNA. Argilla, “FinePersonas”, アクセス⽇: 2024-09-23, https://huggingface.co/datasets/argilla/FinePersonas-v0.1 22
⽬次 • ⾃⼰紹介 • 合成データの重要性 • Persona-Hub による合成データ⽣成 • ⽇本語ペルソナデータによる合成データ⽣成 • マルチターン合成データ⽣成のポイント • ペルソナデータ研究 最近の状況 • 今後の課題 • まとめ 23
今後の課題 • ⼤規模なペルソナデータセットの適⽤ • FinePersonas (英語) を使って⽇本語合成データが作成出来るか? • ⽣成した合成データのAsk-LLMによるスコア付け • スコア下位のフィルタリング • ⼈⼿チェックの作業低減 24
今回紹介出来なかったトピック • トピック • Iterative DPO • LLM-as-a-Judge • Ask-LLM • Zennの記事や今後の発表機会があれば紹介する予定です! 25
まとめ • 合成データの必要性 • Webデータを学習させるだけでは論理・コード・数学カテゴリのベンチ マークスコアを向上させることが難しい • 合成データの難しさ • カバレッジを増加するためには何らかのヒント・種を与える必要がある • 合成データ⽣成⼿法 • Persona-Hub ⼿法 (ペルソナ駆動) • ⽇本語ペルソナデータによる⽇本語合成データ⽣成の試み • マルチターン合成データ⽣成のポイント 26
参考⽂献 • Benjamin Beyret et al., “Animal-AI 2.0.0”, アクセス⽇: 2024-09-23, https://github.com/beyretb/AnimalAI-Olympics • Kan Hatakeyama, “⼤規模⾔語モデルTanuki-8x8Bの紹介と開発経緯など”, 9/10 松尾研LLM開発プロジェクト “Tanuki-8x8B” 開発成果報告会 Vol.1, 発表資料, アクセス⽇: 2024-09-23 • Xin Chan et al., "Scaling Synthetic Data Creation with 1,000,000,000 Personas”, arXiv preprint arXiv:2406.20094v1, 2024. https://arxiv.org/abs/2406.20094 • 厚⽣労働省, ”賃⾦構造基本統計調査の新職種区分案”, アクセス⽇: 2024-09-23, https://www.mhlw.go.jp/content/10700000/000513179.pdf • Wikipedia, “職業⼀覧”,アクセス⽇: 2024-09-23, https://ja.wikipedia.org/wiki/%E8%81%B7%E6%A5%AD%E4%B8%80%E8%A6%A7 • [NEDO 採択プロジェクト] 多様な⽇本語能⼒の向上を⽬指した公開の基盤モデル開発, コードレポジトリ “synth_topic_multiturn.py”,アクセス⽇: 2024-09-23, https://github.com/matsuolab/nedo_project_code/blob/team_hatakeyama_phase2/team_hatakeyama_phase2/ot a/topic-hub/synth_topic_multiturn.py • [NEDO 採択プロジェクト] 多様な⽇本語能⼒の向上を⽬指した公開の基盤モデル開発, データセット “synth-topic-jpbasic-math-calm3”, (準備中), https://huggingface.co/datasets/team-hatakeyama-phase2/synth-topic-jp-basicmath-calm3 • Argilla, “FinePersonas”, アクセス⽇: 2024-09-23, https://huggingface.co/datasets/argilla/FinePersonas-v0.1 27
Tanuki-visionの開発 ~8x8B構築・学習編~ 白石尽誠(Jinsei Shiraishi) 9/24 松尾研LLM開発プロジェクト”Tanuki”開発報告会 Vol.3
自己紹介 • 白石尽誠(Jinsei Shiraishi) • 熊本大学医学部医学科6年 • 2022年頃より,機械学習・深層学習を本格的に勉強開始 • AI系の学生団体への参加(と運営にも関わる) • 松尾・岩澤研究室講義TA・教材作成(DL基礎2024, 深層生成モデル サマースクール2024, 世界モデル2024) • LLM2023修了,LLM開発に興味がわきGENIACに参加 • Phase1では,主にモデルの事前学習を担当 • 発表動画 • 大規模GPUクラスタに触れ,初めてマルチノード学習を行えたのがよかった • Phase2で,モデルの事前学習の初期段階の調査(Transformer Engineなど), およびvisionモデルの構築や学習に携わった
アウトライン • Tanuki-8x8B-vision-expについて • Tanuki-8x8B-vision-expの構築 • Tanuki-8x8B-vision-expの学習 ※今回の発表内容はZenn記事で改めて詳しく説明します(近日公開 予定)
Tanuki-8x8B-vision-expについて • Tanuki-8x8Bを,LLaVA-1.5をベースに視覚言語モデル(Visionlanguage model:VLM)にしたもの • Tanuki-8x8B-dpo-v1.0の事前学習の途中のチェックポイント,およ び画像エンコーダとしてgoogle/siglip-so400m-patch14-384を使用 • 計算リソースの観点で,学習を1epoch未満で打ち切ったことから, 学習途中の実験的なモデルという意味で-expという名称を付けてい る(なお,同じデータを用いて8Bの方は学習が完了できている) [1] https://huggingface.co/weblab-GENIAC/Tanuki-8x8B-vision-exp
何が難しかったか? • 総パラメータ数が約47Bであり,ベースの言語モデルをスケールす ることによる学習コストの増加. • Tanuki-8x8Bはカスタムクラスを採用しており,それに対応できる ようにLLaVA-JPのコードを修正する必要があった. • ベースとしたリポジトリは https://github.com/tosiyuki/LLaVA-JP をフォー クした https://github.com/hibikaze-git/LLaVA-JP • 作業用: https://github.com/Osakana7777777/LLaVA-JP (public archive 済) • 実際に学習を始めてみると,思いのほか時間がかかったほか,様々 なトラブルが発生した.計算リソースの都合により,8x8Bのモデル は1 epoch学習を終わらせることはできなかった. • 約1/4epoch
Tanuki-8x8B-vision-expの構築 • Tanuki-8x8B対応のためコードを書き替え • Tanuki-8x8BはTanuki-8BをMoE化したものであり,独自クラスを使用 • 詳細は畠山様の発表 [2] https://huggingface.co/weblabGENIAC/Tanuki-8x8B-dpov1.0/blob/main/modeling_tanuki.py • そのため,llavaモデルクラスを定義するファイルをTanuki用に書き換えた • さらに,別のファイルでTanukiのembedding処理呼び出しを追加 [3] https://github.com/matsuolab/nedo_project_code/blob/team_hatakeyama_phase2/team_hatakeyama_phase2/multimodal/LLaVA-JP/llavajp/model/llava_arch.py
Tanuki-8x8B-vision-expの構築 • 注意点 • Tanuki-8x8Bの独自クラスを規定しているファイル(configuration_tanuki.py とmodeling_tanuki.py)を,リポジトリ内に直接配置 • modelのロード時に,trust_remote_code=True引数を指定するだけではうま くいかなかった • 詳細は不明だが,相対インポートがうまく動作しない? [4] https://github.com/matsuolab/nedo_project_code/tree/team_hatakeyama_phase2/team_hatakeyama_phase2/multimodal/LLaVA-JP/llavajp/model/tanuki
Tanuki-8x8B-vision-expの学習 • Tanuki-8x8Bの学習本番の前に,学習テストを実施 • 8B以上のモデルや,MoEのモデルで学習ができるようにLLaVA-JPのコード を改造したり動作確認したりする. • これがトラブルの連続で,すんなり8x8Bまで いけなかった. • 今回の発表では,トラブルとその解決に 焦点を当てて説明します. Notionに書いていた作業記録の一部
トラブルその1:out of memory • ELYZA-japanese-Llama-2-13bを使用時 • エラー発生(抜粋) • DeepSpeedのZeROをstage2 -> stage 3にしたら成功 • おそらくout of memoryになっていたと思われる. • stage 3にしないと,おそらく8x8Bは非現実的だろう
トラブルその2:謎の環境変数 • Tanuki-38B(8x8Bの前に学習させていたモデル:詳細は畠山様の発 表)を使用時 • 2 node×8 GPUでの学習を行っていたが,マルチノードを認識しない • hostfileコンフィグの名前をdeepspeed_hostfileにすることで認識できた • ところが・・・ • bash関連のエラーが出現(抜粋) • なんか謎の環境変数が大量にexportされている・・(2行目.スライドに載 り切りませんでした) • (という文字がある原因でエラー
トラブルその2:謎の環境変数 • 結論 • マルチノードの場合,accelerateコマンドで学習するとこのトラブルが発生 • deepspeedコマンドで学習すると,解消した • LLaVA-JP/.deepspeed_envというファイルに謎の環境変数が書き込 まれていた(詳細は不明)
トラブルその3:チェックポイントの異常 • elyza_japanese_llama_2_13bのstage2学習(1nodex8GPU, ZeRO stage 3) • Stage1学習(stageはLLaVA学習の段階で,ZeROとは無関係)終了後, adapterのチェックポイント(mm_projector.bin)が出力される • これをstage2学習に使おうとしたら・・ • チェックポイントがtorch.Size([0])になってしまっている!(抜粋) • 空になっている • 壊れたのか? • ここを乗り切らないと,stage2学習に進めない
トラブルその3:チェックポイントの異常 • if001/tiny_mixtral_ja[5]でも同様のエラーが発生したので,まずそち らで解決を目指す • ローカル環境ではチェックポイントをstage2学習に使えたらしい • チェックポイントサイズは7.5MB • ZeROのstageを変えるとどうか? • ZeRO stage1で出力されたチェックポイントをstage2学習に使えた.
トラブルその3:チェックポイントの異常 • そのあと色々調べていくと,どうやらZeROのstage 3だとadapterの チェックポイントが適切に保存されないらしいことが判明 • LLaVA-JPのコードのチェックポイント保存が,ZeRO stage 3に対応してい ない! • じつは,本家LLaVAのコードではstage 3に対応した関数が実装済み(抜 粋) [6] https://github.com/haotian-liu/LLaVA/blob/main/llava/train/llava_trainer.py • これをLLaVA-JPのコードにも導入->ZeRO stage 3でチェックポイント保存, 使用に成功!
トラブルその3:チェックポイントの異常 • ただし・・ • 1 epoch終了後のチェックポイントは壊れたまま • step○○で保存されたチェックポイントで成功. • 原因を完全に把握できてないが,おそらくZeRO stage3で適切に保 存する部分がstepごとの保存のみに対応している? • step○○を1 epochのstep数で明示的に指定して力技で解決
トラブルその他(時間の関係で簡単に) • 本番開始後・・・ • TanukiがMixtralとして読み込まれてしまう • trust_remote_code=True引数を入れる • 学習がめちゃくちゃ遅い(7時間で20 stepほど・・) • バッチサイズをできるだけ大きくすることで速くできた • stage1は間に合ったが,stage2を完遂できず心残り
知見 • DeepSpeedの使用法がつかめてきた. • Phase1から使用してきたため • epochの途中でも,それなりに良い成績が出せたのが意外だった. • 評価の詳細は山口様の発表
Future work • Megatron-LM/Megatron-Coreを用いたVLMの学習 • こちら[7]に例が掲載されている • 大規模モデルだとこちらが効率的に学習できるかも? • 大規模モデルだとLoRAで学習の方がコスト低い? • heron-blip-v1では,性能はフルパラの方がいいらしい • 一般的な傾向か? [8] Kotaro Tanahashi, “日本語Vision Languageモデル heron-blip-v1の公開”
Future work • データの収集・整備方法に詳しくなる • ほぼお任せの状態になってしまった • GENIACでもデータの扱いはノータッチだったので,自分で適切なデータを 扱えるようになりたい
謝辞 • LLaVA-JPの作者tosiyuki様,およびコードをわかりやすく整備したり 機能を追加したりしてくださった山口様 • モデル評価を行ってくださったy_morinaga様 • 貴重な計算リソースをマルチモーダルグループのために割いてくだ さった,畠山様をはじめとしたチームメンバの皆様(本プロジェク トでは最終成果物の言語モデルを優先していただきました) • 松尾・岩澤研究室 • 経済産業省新エネルギー・産業技術総合開発機構(NEDO) • GENIACコミュニティ 以上の方々に心より感謝申し上げます.
Reference • [1] https://huggingface.co/weblab-GENIAC/Tanuki-8x8B-vision-exp • [2] https://huggingface.co/weblab-GENIAC/Tanuki-8x8B-dpov1.0/blob/main/modeling_tanuki.py • [3] https://github.com/matsuolab/nedo_project_code/blob/team_hatak eyama_phase2/team_hatakeyama_phase2/multimodal/LLaVAJP/llavajp/model/llava_arch.py • [4] https://github.com/matsuolab/nedo_project_code/tree/team_hatake yama_phase2/team_hatakeyama_phase2/multimodal/LLaVAJP/llavajp/model/tanuki • [5] https://huggingface.co/if001/tiny_mixtral_ja
Reference • [6] https://github.com/haotianliu/LLaVA/blob/main/llava/train/llava_trainer.py • [7] https://github.com/NVIDIA/MegatronLM/tree/main/examples/multimodal (アクセス日:2024/9/24) • [8] Kotaro Tanahashi, “日本語Vision Languageモデル heron-blip-v1 の公開”
Tanuki-visionの開発 山口裕輝 2024/9/24 松尾研LLM開発プロジェクト “Tanuki” 開発報告会 Vol.3 1
自己紹介 ● 山口 裕輝 ○ ○ サーバーサイドエンジニア ■ 施設の案内システム開発 ■ 自然言語処理(GINZA等の活用) LLM開発は本プロジェクトがはじめて ■ ○ Phase1ではTeam JINIACで活動(主にデータの準備・事後学習) VLMに以前から興味があり、Phase2に参加 ■ 対話システムにVLMを組み込みたい 2
発表のアウトライン 1. Tanuki-visionの開発の概要 2. モデルの検討 3. データの準備 4. 評価 5. 取り組めなかったこと ※学習については、主に8x8Bモデルについて別途発表いただく 3
Tanuki-visionの開発の概要(位置づけ) ● 開発したLLM(Tanuki)を活用 ○ リソース有効活用のための +α的な取組み ● Tanuki開発の方針にならう ○ データ重視 ○ 合成データを活用 4
Tanuki-visionの開発の概要(成果) ● ● 2つのモデルを作成 ○ Tanuki-8B-vision ○ Tanuki-8x8B-vision-exp※ Averageとしては、 cyberagent/llava-calm2-siglip と同程度の性能 ● デモ: Tanuki-8B-vision ※ 8月時点のHeron VLM リーダーボードの結果を基に作成 ※ 1epoch学習できなかったため、実験的なモデルという意味で -expという名称を付けています 5
モデルの検討(学習コード・アーキテクチャ) ● 学習コード ○ ○ ● tosiyuki/LLaVA-JP ■ 日本語データでの学習実績 ■ 理解を助ける素晴らしい記事 マルチGPU対応等を実施(コード) アーキテクチャ ○ LLaVA ■ VLMのベースライン ■ LLaVA-NExT Blog等の豊富な知見 [1] Haotian Liu et al. (2023), “Visual Instruction Tuning” 6
モデルの検討(LLM、画像エンコーダ) ● LLM ○ Tanuki-8B-vision ■ ○ Tanuki-8x8B-vision-exp ■ ○ Tanuki-8B-dpo-v1.0の学習途中のモデル Tanuki-8x8B-dpo-v1.0の学習途中のモデル いずれも事後学習なしのモデルを使用※ [2] @toshi_456, “解像度の高い画像が入力可能な日本語 VLMを学習させてみた” ● 画像エンコーダ ○ google/siglip-so400m-patch14-384 ○ S2-Wrapper(解像度の高い画像を入力可能とする仕組み)を使用 ※ Prismatic VLMs論文にて、事後学習の有無で有意な性能向上が見られなかったとの報告あり 7
データ(方針) ● InternVL1.5のデータセットtaskカテゴリを参考に準備 ● 商用利用可能な日本語データがほぼ存在しなかった ○ データの合成・翻訳で対応 ■ 100万件ほど合成 ■ H100×8 1ノード 1週間に相当する時間を要した ● 主に英語に堪能なVLMを使用したため、推 論結果を翻訳する必要があった ● vllmがvlmのバッチ処理に未対応で高速化 できなかった※ ○ 既存のデータセットも活用(Stair Captions等) [3] Zhe Chen et al. (2024), “How Far Are We to GPT-4V? Closing the Gap to Commercial Multimodal Models with Open-Source Suites” ※ 開発当時の状況です。 8
データ(一覧) ● おおよそ200万件のデータを用意 ● Stage1では簡単なデータ、Stage2ではより複雑なデータを学習 ● データ合成に用いたコードはこちらで公開しています 9
データ(commoncatalog-cc-by-sa-ja-calm3) ● 画像データ ○ ● ● common-canvas/commoncatalog-cc-by-sa 合成に用いたモデル ○ microsoft/Phi-3-vision-128k-instruct ○ cyberagent/calm3-22b-chat 一枚の画像に対し、3種類のキャプションを生成 ○ [4] turing-motors/Japanese-Heron-Bench 推論結果をcalm3で日本語に翻訳 Q: この写真について詳しく説明してください。 A: 画像は、前面にオレンジ色の帯が施された銀色の 電車が駅に停車している様子を示しています。電車の 窓からは人の姿が見え、電車は緑の金属フェンスの 後ろに停車しています。背景には、頂上に雪がかかっ た大きな富士山が見えます。空は晴れていて青いで す。 10
データ(Synthetic-TextWebImages) ● ● テキストデータ ○ stockmark/ner-wikipedia-dataset ○ Cohere/wikipedia-22-12-ja-embeddings 合成に用いたモデル ○ ● microsoft/Phi-3-medium-128k-instruct text: 他の白亜紀魚類と共に中生代の終わりに絶滅し たため、カジキとの類似は収斂進化によるものと考え られる。 html合成 html2imageで 画像化 ラーメンの器の文字から店名を答えられるようなる等、 一定の効果が見られた 11
データ(commoncatalog-cc-by-recap-diverse_questions) ● ● 画像・キャプションデータ ○ common-canvas/commoncatalog-cc-by ○ alfredplpl/commoncatalog-cc-by-recap 合成に用いたモデル ○ ● cyberagent/calm3-22b-chat MM-Instruct論文で示された質問カテゴリを基 に、calm3で質問を生成 ● キャプションデータと質問をcalm3に与え、画像 を見ているかのように回答させ、データを合成 ● Phi-3-visionでは多様な回答の生成ができず、 LLMで合成 [5] liuhaotian/llava-bench-in-the-wild Q: この絵に基づいたおとぎ話を書いてください。 A: …まず、丸太の左側に座っていたのは、黒い熊でした。彼は大きな 木の枝を口にくわえ、まるで何かを探検しているかのようでした。熊の 目は好奇心で輝き、周囲を見渡していました。 次に、丸太の上には、灰色の猫が座っていました。彼女は白い皿に盛 られたクッキーを前に置き、そのクッキーはまるで宝石のように輝いて いました。猫はクッキーを一口かじると、その美味しさに目を輝かせま した。彼女の耳はピンと立ち、まるで「もっと食べたい!」と言わんばか りでした。 そして、丸太の中には、白いウサギが座りました。ウサギは … 12
評価 ● Heron VLM リーダーボードで評価(コード※) ○ ● Tanuki-8x8B-vision-exp cyberagent/llavacalm2-siglip gpt-4-turbo-2024-04-09を使用 cyberagent/llava-calm2-siglipと比較して、画像の説明能力に強 みがある ● llava_convが特に弱い→知識問題や物体認識など ● 8B→8x8Bにスケールすることで性能向上 ○ 「千と千尋の神隠し」の「千尋」の名前を答えられるよう になる等、知識問題が改善 ■ 8x8Bを学習させるまではデータの問題と考えていた ため、意外な結果 Tanuki-8B-vision ● GPT-4oの出力と比べると、正確に問いに答えつつ、関連する役立 つ知識を提示する能力に圧倒的な差があると感じた ※ 本日は登壇されませんが、 Phase2開発メンバーの y_morinagaさんに尽力いただきました。ありがとうございます。 ※ レーダーチャートとして表示するため、 cyberagent/llava-calm2-siglipを別途独自 に評価しており、本家リーダーボードの値と差異がある。傾向を比べるための参考値 と考えていただきたい 13
取り組めなかったこと(その1) 1. 図表・文章画像の学習 a. 2. 3. JDocQAやthe_cauldronなど、データセット自体はある Interleavedデータの学習 a. Web 画像-textデータ(MINT-1T等) b. オープンな画像データは欧米のものが多い i. 日本の画像データを扱う必要がある ii. VLMの知識を扱う能力も強化されないか 動的解像度対応 a. モデルに画像を入力する際、1:1のアスペクト比に変更されてしまうが、縦長・横長の画像 を扱えるようにする。(scaling_on_scalesにも実装はある様子) 14
取り組めなかったこと(その2) 4. DPO a. TRLに実装があるため試みましたが、データ不足などの理由で断念 b. transformersで扱えるモデルへの変換まで手が回らなかった i. 5. データの厳選 a. b. 6. 学習コードの選定の際は、上記の観点も重要 200万件のデータの学習には多くの時間を要する i. Tanuki-8B-vision: H100 x 8, 1ノード, 1.7epoch, 28時間 ii. Tanuki-8x8B-vision-exp: H100 x 8, 2ノード, 0.25epoch, 28時間 名詞の出現回数に上限を設け、データセットで扱うトピックをバランスよくする等 マルチターン会話データの合成・学習 15
Reference [1] Haotian Liu et al. (2023), “Visual Instruction Tuning” [2] @toshi_456, “解像度の高い画像が入力可能な日本語VLMを学習させてみた” [3] Zhe Chen et al. (2024), “How Far Are We to GPT-4V? Closing the Gap to Commercial Multimodal Models with Open-Source Suites” [4] turing-motors/Japanese-Heron-Bench [5] liuhaotian/llava-bench-in-the-wild 16