datawhalechina/happy-llm
主な特徴
- **体系的なカリキュラム**: NLP基礎からLLM応用まで7章構成
- **理論と実践の統合**: 各章に動作するコード実装付属
- **中国語ファースト**: 中国語話者向けに最適化された内容
- **オープンソース**: CC BY-NC-SAライセンスで無料公開
- **完全な実装**: LLaMA2スタイルのモデルをゼロから構築
- **最新技術対応**: LoRA/QLoRA、RAG、Agentなどの最新手法をカバー
- **事前訓練済みモデル**: ModelScopeで215Mパラメータモデル提供
- **コミュニティサポート**: Datawhaleコミュニティによる継続的な更新
リポジトリ解析: datawhalechina/happy-llm
基本情報
- リポジトリ名: datawhalechina/happy-llm
- 主要言語: None (ドキュメント中心、コードはPython)
- スター数: 8,372
- フォーク数: 593
- 最終更新: 2025年(アクティブに更新中)
- ライセンス: CC BY-NC-SA 4.0 International
- トピックス: LLM, 大语言模型, 教程, transformer, 课程, datawhale
概要
一言で言うと
ゼロから大言語モデル(LLM)の原理を学び、実際にモデルを構築・訓練・応用できるようになるための完全な中国語教育チュートリアル。
詳細説明
Happy-LLMは、中国の著名なAIオープンソースコミュニティであるDatawhaleが提供する、大規模言語モデルの包括的な学習教材です。自然言語処理の基礎から始まり、Transformerアーキテクチャの詳細、事前学習モデル、そして大規模言語モデルの構築・訓練・応用までをカバーしています。特に、各理論コンセプトに実装コードが付属しており、学習者が実際に手を動かして理解を深めることができる点が特徴です。
主な特徴
- 体系的なカリキュラム: NLP基礎からLLM応用まで7章構成
- 理論と実践の統合: 各章に動作するコード実装付属
- 中国語ファースト: 中国語話者向けに最適化された内容
- オープンソース: CC BY-NC-SAライセンスで無料公開
- 完全な実装: LLaMA2スタイルのモデルをゼロから構築
- 最新技術対応: LoRA/QLoRA、RAG、Agentなどの最新手法をカバー
- 事前訓練済みモデル: ModelScopeで215Mパラメータモデル提供
- コミュニティサポート: Datawhaleコミュニティによる継続的な更新
使用方法
インストール
前提条件
- Python 3.8以上
- PyTorch 1.13以上
- GPU環境(推奨、モデル訓練に必要)
- 8GB以上のGPUメモリ(実践編用)
インストール手順
# リポジトリのクローン
git clone https://github.com/datawhalechina/happy-llm.git
cd happy-llm
# 各章の依存関係をインストール(例:第2章)
cd docs/chapter2
pip install -r requirements.txt
# オンラインドキュメントの閲覧
# https://datawhalechina.github.io/happy-llm/
基本的な使い方
Hello World相当の例
# 第2章:Transformerの基本実装
from transformer import Transformer, ModelConfig
# 設定
config = ModelConfig(
vocab_size=50257,
hidden_dim=512,
num_heads=8,
num_layers=6
)
# モデルの初期化
model = Transformer(config)
# 推論例
input_ids = torch.randint(0, config.vocab_size, (1, 10))
output = model(input_ids)
print(f"Output shape: {output.shape}")
実践的な使用例
# 第5章:LLaMA2スタイルモデルの構築
from k_model import MiniLLaMA, ModelConfig
from transformers import AutoTokenizer
# トークナイザーのロード
tokenizer = AutoTokenizer.from_pretrained("model_save/happy_llm")
# モデル設定
config = ModelConfig(
vocab_size=tokenizer.vocab_size,
hidden_dim=512,
num_heads=8,
num_layers=8,
max_seq_len=512
)
# モデルのロード
model = MiniLLaMA.from_pretrained("model_save/happy_llm")
# テキスト生成
input_text = "我是一个"
inputs = tokenizer(input_text, return_tensors="pt")
with torch.no_grad():
outputs = model.generate(**inputs, max_length=50)
print(tokenizer.decode(outputs[0]))
高度な使い方
# 第7章:RAGシステムの実装
from rag import VectorStore, OpenAIEmbedding, RAGSystem
# ベクトルストアの初期化
embedding_model = OpenAIEmbedding()
vector_store = VectorStore(embedding_model)
# ドキュメントの追加
documents = [
"LLMは大規模言語モデルの略称です。",
"Transformerは2017年に提案されたアーキテクチャです。"
]
vector_store.add_documents(documents)
# RAGシステムの構築
rag_system = RAGSystem(vector_store, llm_model)
# 質問応答
query = "LLMとは何ですか?"
answer = rag_system.answer(query)
print(answer)
# 第7章:Agentの実装
from agent import Agent, Tool
# ツールの定義
def search_tool(query: str) -> str:
# 検索ロジック
return f"Search results for: {query}"
# Agentの初期化
agent = Agent(llm_model)
agent.register_tool(Tool("search", search_tool))
# Agentの実行
response = agent.run("最新のLLM研究について教えてください")
ドキュメント・リソース
公式ドキュメント
- README.md: プロジェクト概要、章構成、貢献者情報
- README_en.md: 英語版README
- docs/前言.md: プロジェクトの背景と目的
- docs/index.html: オンラインドキュメントのエントリポイント
- オンラインサイト: https://datawhalechina.github.io/happy-llm/
サンプル・デモ
- chapter2/transformer.py: Transformerの完全実装
- chapter5/k_model.py: LLaMA2スタイルモデル実装
- chapter5/tokenizer_train.py: トークナイザー訓練スクリプト
- chapter7/rag/: RAGシステム実装
- chapter7/agent/: Agentフレームワーク実装
チュートリアル・ガイド
- 第1章: NLP基礎知識(歴史、タスク、テキスト表現)
- 第2章: Transformerアーキテクチャ詳解
- 第3章: 事前学習言語モデル(BERT、GPT、T5)
- 第4章: 大規模言語モデルの概念と特性
- 第5章: LLMのゼロからの構築
- 第6章: LLM訓練実践(作業中)
- 第7章: LLM応用(RAG、Agent)
技術的詳細
アーキテクチャ
全体構造
教育的カリキュラム設計:
- 基礎編(第1-4章): 理論中心、NLP基礎からLLM概念まで
- 実践編(第5-7章): ハンズオン実装と応用
ディレクトリ構成
happy-llm/
├── docs/ # 教材ドキュメント
│ ├── chapter1/ # NLP基礎概念
│ ├── chapter2/ # Transformerアーキテクチャ
│ │ ├── transformer.py # 完全実装
│ │ └── requirements.txt
│ ├── chapter3/ # 事前学習言語モデル
│ ├── chapter4/ # 大規模言語モデル
│ ├── chapter5/ # LLM構築実践
│ │ ├── k_model.py # LLaMA2スタイルモデル
│ │ ├── tokenizer_train.py
│ │ └── train_scripts/
│ ├── chapter6/ # 訓練流程実践[WIP]
│ └── chapter7/ # LLM応用
│ ├── rag/ # RAG実装
│ └── agent/ # Agent実装
└── images/ # 図表リソース
主要コンポーネント
-
Transformer実装: 完全なエンコーダー・デコーダーアーキテクチャ
- 場所:
docs/chapter2/transformer.py - 機能: マルチヘッドアテンション、位置エンコーディング
- インターフェース: forward(), encode(), decode()
- 場所:
-
MiniLLaMAモデル: LLaMA2風のカスタム実装
- 場所:
docs/chapter5/k_model.py - 機能: RMSNorm、Rotary位置エンコーディング
- インターフェース: HuggingFace互換
- 場所:
-
RAGシステム: 検索拡張生成
- 場所:
docs/chapter7/rag/ - 機能: ベクトルストア、埋め込み、検索パイプライン
- インターフェース: VectorStore, RAGSystem
- 場所:
技術スタック
コア技術
- 言語: [バージョン、使用している機能]
- フレームワーク: [具体的な使用方法]
- 主要ライブラリ:
- [ライブラリ名] ([バージョン]): [具体的な用途]
開発・運用ツール
- ビルドツール: [設定の特徴]
- テスト: [テスト戦略、カバレッジ]
- CI/CD: [パイプラインの内容]
- デプロイ: [デプロイ方法]
設計パターン・手法
[採用されているパターンとその実装例]
データフロー・処理フロー
[入力から出力までの詳細な流れ]
API・インターフェース
公開API
[API名/エンドポイント]
- 目的: [何のためのAPI]
- 使用例:
// APIの使用例
設定・カスタマイズ
設定ファイル
# 主要な設定項目と説明
拡張・プラグイン開発
[拡張機能の作り方、インターフェース]
パフォーマンス・スケーラビリティ
パフォーマンス特性
- ベンチマーク結果: [具体的な数値]
- 最適化手法: [使用されている技術]
スケーラビリティ
[大規模利用時の考慮事項]
制限事項
- [技術的な制限]
- [運用上の制限]
評価・所感
技術的評価
強み
- [技術的な強み1]
- [技術的な強み2]
改善の余地
- [改善点1]
- [改善点2]
向いている用途
- [具体的なユースケース1]
- [具体的なユースケース2]
向いていない用途
- [制限される用途1]
- [制限される用途2]
総評
[全体的な評価と所感]