アーキテクチャ設計
全体アーキテクチャ
┌─────────────────────────────────────────────────────────────────┐
│ Ego Pod(自我意識カプセル) │
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌────────┐ │
│ │データコレクター│───→│コーパスコンパイラー│───→│ 訓練エンジン │───→│バージョン管理│ │
│ │ Collector │ │ Compiler │ │ Trainer │ │ Vault │ │
│ └───────────┘ └───────────┘ └───────────┘ └────────┘ │
│ ↑ ↓ │
│ ┌─────────┐ ┌──────────┐ │
│ │データソース設定│ │ Ego 出力 │ │
│ │ Sources │ │ Editions │ │
│ └─────────┘ └──────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 設定センター(Config) │ │
│ │ ベース選定 · Edition 定義 · 訓練パラメーター · データソースマッピング · スケジュール │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
モジュール説明
1. データコレクター(Collector)
設定で指定されたデータソースからホストデータを読み取ります。
対応データソースタイプ:
- ローカルディレクトリ(ファイルシステムパス)
- URL(HTTP/HTTPS エンドポイント)
- クラウドストレージ(S3、OSS、Google Drive など、プラグインで拡張)
- カスタムアダプター(ユーザーが収集プラグインを作成可能)
収集するデータカテゴリ(iFay アーキテクチャ対応):
| データカテゴリ | 対応 iFay モジュール | 現実の例 |
|---|---|---|
| 知覚データ | Sense | 毎日の運動軌跡、スマートフォン使用時間分布、よく行くレストランの位置、睡眠時間パターン |
| 行動データ | Action | スマートフォンでの操作習慣(いつも LINE を先に見てからメールを見る)、よく使うショートカット、自動化スクリプト |
| 認知データ | Thought | 読書メモ、業務日誌、学習ノート、技術方案への評価と思考プロセス |
| スキルデータ | Skill | 使えるプログラミング言語と習熟度、得意なレシピ、演奏できる楽器と曲目リスト |
| 認証データ | Credentials | 身元識別子、認可範囲(例:代わりにメールは送れるが送金はできない)、権限境界 |
例えば:フリーランス翻訳者の Collector 設定はこのようになるかもしれない——Sense は翻訳メモリ(ローカルディレクトリ)を指し、Action は CAT ツールの操作ログ(URL)を指し、Thought は用語ノート(クラウドストレージ)を指し、Skill は言語ペアと専門分野リスト(ローカルファイル)を指す。
Collector はデータの内部フォーマットには関心がなく(それは姉妹プロジェクトが定義)、「どこから取得するか」と「取得したのはどのカテゴリのデータか」だけに関心があります。
2. コーパスコンパイラー(Compiler)
収集した生データを LoRA 訓練に使用可能なコーパスに変換します。
コア責務:
- データクレンジングと匿名化 — 特に Credentials 関連データ。例:API キー
sk-abc123...は[REDACTED]に置換され、訓練データに機密情報が含まれないことを保証 - フォーマット標準化 — 訓練フレームワークが受け入れ可能なフォーマットに統一。例:読書メモ「この本は分散システムの CAP 定理について...」が
{"instruction": "CAP 定理を説明して", "output": "CAP 定理は分散システムの..."}に変換 - コーパス分類 — LoRA レイヤー別にグループ化。例:「アメリカンコーヒーが好き」は嗜好レイヤーに、「2024年に日本旅行した」は記憶レイヤーに、「Python の GIL メカニズムは...」は知識レイヤーに分類
- 品質フィルタリング — ノイズデータ、重複データを除去。例:重複チャット記録は1つだけ保持、短すぎる断片(「うん」「了解」など)はフィルタリング
- データ拡張 — 必要に応じてテンプレートやリライトでコーパスを拡充。例:元データ「曲をおすすめして」が「別の言い方で表現して:曲をおすすめして」「言い換えて:曲をおすすめして」に拡張
出力フォーマット:
- 標準的な指示ファインチューニングデータセット(instruction/input/output 三つ組)
- 対話形式データセット(multi-turn conversation)
- LoRA レイヤー別にグループ化されたサブデータセット
3. 訓練エンジン(Trainer)
選定したベースと構築済みコーパスに基づいて、LoRA アダプターを訓練します。
マルチバックエンド自動適応:
Trainer はハードウェア環境を自動検出し、最適な訓練バックエンドを選択します:
| 優先度 | バックエンド | 適用環境 | 速度 |
|---|---|---|---|
| 1 | Unsloth | NVIDIA GPU (CUDA) | 最速(2x 高速化) |
| 2 | HuggingFace PEFT | NVIDIA GPU (CUDA) | 標準速度 |
| 3 | Apple MLX | Mac (Apple Silicon) | ネイティブ高速化 |
| 4 | HuggingFace PEFT | CPU のみ | 遅いが汎用 |
| 5 | Stub | ML 依存なし | シミュレーションモード(開発/テスト用) |
どのバックエンドを使うか気にする必要はありません——Ego Pod が自動選択します。RTX 4090 があれば Unsloth で高速化、MacBook Pro M3 なら MLX を使用、まずフローを試したいだけなら Stub モードでシミュレーション訓練。
訓練フロー:
- ベースモデルをロード(4-bit 量子化)
- LoRA レイヤー別に順次アダプターを訓練
- 訓練効果を検証(自動整合度評価)
- 各 edition に対応するベース+LoRA の組み合わせを生成
マルチ Edition 訓練戦略:
- 各 edition は異なる規模のベースを使用
- 同一コーパスで、異なるベースに対してそれぞれ LoRA を訓練
- 複数 edition の並列訓練が可能
例えば:GPU 搭載のデスクトップ PC で
ego trainを実行すると、Ego Pod がスマートウォッチ(lite)、スマートフォン(normal)、PC(plus)の3バージョンの LoRA を同時に訓練します。全プロセスは約 10-30 分、データ量に依存します。
4. バージョン管理(Vault)
Ego モデルのバージョンと出力を管理します。
責務:
- 各訓練で生成された LoRA アダプターを保存
- 複数 edition のモデルファイルを管理
- バージョンロールバックをサポート(履歴バージョンを保持)
- 旧バージョンの上書き(デフォルト動作)
- 配布可能な Ego パッケージとしてエクスポート
例えば:先週 Ego を訓練し(v0.1.0)、今週新しいデータを追加して再訓練(v0.2.0)。新バージョンの回答スタイルが変わって、あなたらしくなくなった。この時、ワンクリックで v0.1.0 にロールバックできます。スマートフォンの OS ダウングレードのように。
Ego パッケージ構造:
ego-output/
├── manifest.json # Ego メタデータ(バージョン、ベース情報、edition リスト)
├── lite/
│ ├── config.json # edition 設定(ベース型番、量子化方式、ハードウェア要件)
│ └── adapters/
│ └── ego-lora.safetensors # LoRA アダプター重み
├── normal/
│ ├── config.json
│ └── adapters/
│ └── ego-lora.safetensors
├── plus/
│ ├── config.json
│ └── adapters/
│ └── ego-lora.safetensors
├── super/
│ ├── config.json
│ └── adapters/
│ └── ego-lora.safetensors
└── [custom-name]/ # ユーザーカスタム edition
├── config.json
└── adapters/
└── ego-lora.safetensors
5. 設定センター(Config)
Ego Pod のすべての設定を統一管理します。
設定項目:
# ego-config.yaml 例
# データソースマッピング — Ego Pod にデータの場所を教える
sources:
sense:
type: "local"
path: "/data/ifay/sense/" # 知覚データディレクトリ
action:
type: "url"
endpoint: "https://api.example.com/action-logs" # 行動ログ API
thought:
type: "local"
path: "/data/ifay/thought/" # メモと知識ベース
skill:
type: "s3"
bucket: "ifay-skills" # クラウドスキルデータ
prefix: "user-001/"
credentials:
type: "local"
path: "/data/ifay/credentials/" # 認証データ(自動匿名化)
# 訓練パラメーター — 通常変更不要、デフォルト値がほとんどのシナリオに適合
training:
method: "qlora"
quantization: "4bit"
lora_rank: 16
lora_alpha: 32
learning_rate: 2e-4
epochs: 3
batch_size: 4
# Edition 定義 — 出力したいバージョン
editions:
lite:
base: "qwen3.5-0.8B"
description: "スマートウォッチ、ボイスレコーダー、ドローン、IoT"
normal:
base: "qwen3.5-2B"
description: "スマートフォン、タブレット"
plus:
base: "qwen3.5-4B"
description: "ハイパフォーマンス PC、ローカルサーバー"
super:
base: "qwen3.5-27B"
description: "クラウドサービス、GPU クラスター"
# カスタム edition を追加可能、例:
# clinic:
# base: "qwen3.5-4B"
# description: "外来診療専用版"
# スケジュール戦略 — いつ自動再訓練するか
schedule:
auto_update: true
interval: "weekly" # 毎週自動修練
trigger: "data_change" # または manual(手動トリガー)/ cron(定期タスク)
