コンテンツにスキップ

LLM Training System

  • 最終更新日: 2026年8月14日

[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。 この文書では、現時点の実装を「最小実装」として扱い、今後必要となる拡張ポリシーを明示する。実装済みコアと将来拡張の境界は、各アーキテクチャごとの仕様書で管理する。

This system provides automated training for different types of Large Language Models (LLMs) with API support and Docker integration.

Features

  • Multi-Modal Training: Support for LangText, Vision, Audio, and MultiModal models
  • API-Driven: RESTful API for job submission and monitoring
  • GPU/CPU Support: Optimized for both GPU and CPU environments
  • Docker Integration: Easy deployment with containerization
  • Load Balancing: Nginx-based load balancer for multiple instances

Quick Start

Prerequisites

  • Docker and Docker Compose
  • NVIDIA Docker (for GPU training)
  • At least 16GB RAM recommended

1. Data Collection

First, collect training data using the data collection script:

python scripts/collect_llm_training_data.py --config config/data_config.yaml

This will create the following directory structure:

data/llm_training/
├── LangText/
├── Vision/
├── Audio/
└── MultiModal/

2. Start Training Servers

GPU Training

./scripts/train_launcher.sh gpu

CPU Training

./scripts/train_launcher.sh cpu

Both GPU and CPU with Load Balancer

./scripts/train_launcher.sh all

3. Access API

  • GPU Server: http://localhost:8000
  • CPU Server: http://localhost:8001
  • Load Balancer: http://localhost:8080
  • API Documentation: http://localhost:8000/docs (FastAPI)

API Usage

Submit Training Job

curl -X POST "http://localhost:8000/train" \
  -H "Content-Type: application/json" \
  -d '{
    "category": "LangText",
    "model_name": "microsoft/DialoGPT-medium",
    "dataset_path": "data/llm_training/LangText/langtext_data.jsonl",
    "output_dir": "saved_models/LangText",
    "gpu": true,
    "epochs": 3,
    "batch_size": 8,
    "learning_rate": 0.00002
  }'

Check Job Status

curl http://localhost:8000/jobs
curl http://localhost:8000/jobs/{job_id}

Supported Categories

Architecture extension contract

EvoSpikeNet の LM は単一の実装に統合されず、次の系統を明示的に管理する。

  1. SpikingEvoTextLM / dense_chronospike — dense text path, current default for text inference/training.
  2. SparseEventMemoryLM / sparse_event_memory — memory-efficient sparse text path, checkpoint incompatible with dense models.
  3. EvoNetLM / standard_transformer — standard float Transformer flow for comparison and fallback cases.
  4. SpikingEvoMultiModalLM / spiking_multimodal — dense multimodal path using image/audio spike fusion.
  5. MemoriedSpikeNetLM / memoried_spikenetlm — planned expansion from sparse event-memory backbone into multimodal token streams with modality-aware routing and artifact contracts.

本ドキュメントで「最小実装」と記述するのは、特定の実行パスが最小動作確認済みであり、将来的な充実や相互接続のための拡張ポイントが仕様として残っていることを示す。

現行の dense text path: SpikingEvoTextLM

現行の dense text path は evospikenet/models.pySpikingEvoTextLM を指し、実装は単純な単一バックボーンではなく、次の複合構成を保持する。

  • TASEncoderDecoder による token → spike-train 暗号化
  • SpikingTransformerBlock を複数積む temporal transformer
  • ChronoSpikeAttention による因果的時間注意
  • AEG による energy gating(任意)
  • MetaSTDP/AEG による reward-based adaptation(任意)
  • readout_mixer + direct_output_fc による direct/deep readout 混合

これは当初の「単純なスパイク変換器」ではなく、学習時にハードスパイク側と直接投影側の両方がオンラインで混ざる設計に更新されている。

収束制御の現状

examples/train_spiking_evospikenet_lm.py では、_resolve_convergence_profile() が profile を決定し、CLI/API/環境変数の優先順を保つ。

  • default profile: stable_baseline
  • stable_plus, stable_converge, aggressive_convergence を選択可能
  • user-submitted learning rate / seq_len / batch_size / epochs は profile で上書きされない
  • EVOSPIKENET_TRAIN_*_OVERRIDE 変数がプロファイルを上書きする

現行の実装上の重要なポイントは次の通り。

  • EVOSPIKENET_FORCE_HARD_SPIKE_PARITY=true のとき、continuous relaxation は強制無効化される
  • stable_converge は AEG と Meta-STDP を False に切り、収束を安定化させる
  • reward_mode=ema_deltareward_clip_value によりノイズを抑制する
  • grad_clip_norm=0.5 などにより長系列学習の破綻を防ぐ

学習データの流れ

実際の training path は次の流れで進む。

  1. get_training_corpus(args) が corpus を取得
  2. 日本語データの場合、_apply_rag_japanese_preprocess() で NFKC 正規化・Sudachi/フォールバック・chunking を行う
  3. _iter_preprocessed_hf_japanese_wikipedia_chunks() で streaming chunk を生成
  4. _tokenize_corpus_in_chunks() で tokenizer による tokenization を実施
  5. _build_next_token_dataset() で shift-by-one の next-token dataset を生成
  6. 学習時には loss から reward_signal を計算し、必要に応じて AEG / MetaSTDP に供給

ここで注意するべき点は、現在の学習では「ドキュメントの文書列」のように長い単一テキストをそのまま feed するより、chunk 経由で text → token → next-token dataset へ変換し、長いコーパスでもメモリを制御しつつ数百万 token を扱える設計になっていることだ。

数理的な観点

SpikingEvoTextLM の学習は単なる SNN での ranking ではない。出力 logits は次式で構成される。

\[ ext{logits} = \sigma(\alpha) \, \text{direct\_logits} + (1 - \sigma(\alpha)) \, \text{deep\_logits} \]

ここで \(\alpha = \text{sigmoid}(\text{readout\_direct\_logit\_mix})\) であり、hard spike path の安定性と直接投影の強い early learning signal を両立させる。

また ChronoSpikeAttention は時間差分マスク

\[ M(t, t') = \exp\left(-\max(0, t - t') / \tau\right) \]

を使って、未来情報にアクセスできないように制約しながら、過去のイベントを指数的に減衰させて注意を計算する。

LangText

  • Models: GPT, BERT, DialoGPT
  • Features: Text generation, language understanding
  • Use Cases: Chatbots, text completion

Sparse Event-Memory LM

  • 実装: SparseEventMemoryLMEvoSpikeNet-Core/evospikenet/sparse_event_memory.py
  • 特徴: 固定トポロジーINT8 CSR主シナプス、INT16イベント状態、Top-k専門家ルーティング、因子化共有語彙、sampled softmax
  • 学習範囲: Adamは語彙基底・ルータ・低ランクアダプタ・正規化層のみを更新し、主シナプスは局所Hebbian更新を使用
  • 選択方法: examples/train_spiking_evospikenet_lm.py --architecture sparse_event_memory
  • 注意: 密なSpikingEvoTextLM/ChronoSpikeAttentionとは別系統です。詳細は仕様書を参照してください。

アプリケーションからの可変モデル構成

d_model、heads、block数、time_stepsneuron_type、architecture を UI から変更する場合は、各学習結果を独立したモデルとして登録します。d_model 単独でモデルを識別してはなりません。

  • d_model と head 数には \(d_{model} \bmod n_{heads} = 0\) が必要です。
  • 新規学習は、モデル固有の checkpoint、config.json、Tokenizer bundle、model_spec を durable storage に保存します。
  • 追加学習は構成変更ではありません。構造、語彙、Tokenizer、artifact digest がベースモデルと完全一致する場合だけ許可します。
  • 推論は、選択したモデル自身の model_spec と artifact manifest から構築し、フォームの既定値や別モデルの構成を再利用しません。

Mineral Exploration LanguageMode は、manifest 生成、model_spec 台帳、legacy 表示、追加学習・推論の preflight、構成プリセットを実装しています。Docker 再起動を伴う本番適用と実行中ジョブへの移行は別作業です。導入要件は LanguageModel アーキテクチャ互換性・アーティファクト契約 を参照してください。

GPU 容量検証と提出構成の保持

Mineral Exploration LanguageMode は、dense SpikingEvoTextLM の構成変更時に現在の可視 GPU の必要/空き VRAM を表示し、既知の容量不足時は開始を無効化します。起動 API も同じ検証を行い、不足時は HTTP 422 で拒否します。

  • Core、SDK、UI は提出済みの batch_size やモデル構成を自動的に縮小しません。容量不足時は、利用者が明示的に構成を変更します。
  • 見積もりと Core 実行は同じ提出済み seq_len を使用します。収束向けの UI 初期値は seq_len=64、learning rate は 0.0001 です。
  • 保存される artifact の config.jsontraining_execution に提出値、実効値、選択された収束制御を記録します。Core は提出された learning rate、seq_lenbatch_size、epoch 数を上書きしないため、両者は一致します。
  • 判定は CUDA_VISIBLE_DEVICES、未設定時は NVIDIA_VISIBLE_DEVICES の先頭 GPU の現在の空き VRAM に基づきます。複数 GPU の VRAM は合算しません。
  • GPU 状態は照会後に変化し得るため、実行時 OOM を完全には排除しません。実行時も自動的な batch size 再試行は行いません。

API、見積もり、H100 を含むハードウェア移植性、422 応答の詳細は LanguageModel GPU 容量検証ポリシー を参照してください。

Core ダッシュボードの LanguageModel 学習設定

Core の SpikingEvoTextLM 学習ページでは、Mineral Exploration LanguageMode と同じ実行可能なテキスト学習構成を編集できます。architecture(dense_chronospike / sparse_event_memory)、d_model、head 数、block 数、time_stepsneuron_typeLIFEvoLIFIzhikevich)、Tokenizer、sequence length、learning rate、batch size、epoch 数、データソース、および新規/追加学習を設定します。Small/Base/Large プリセットは入力欄を設定するだけであり、その後の個別編集を制限しません。

  • Core は UI で提出された learning rate、sequence length、batch size、epoch 数、構造値を自動変更しません。CPU/GPU の容量不足は明示的に失敗し、利用者が設定を変更します。
  • 追加学習では Core のローカル artifact から選択した checkpoint を base_model_path として渡します。Mineral のモデル台帳 ID を Core に渡す互換レイヤーではありません。
  • TransformerLM (Float) ページは標準 Float Transformer 用です。d_model、head 数、block 数、sequence length、learning rate、batch size、epoch 数、データソース、新規/追加学習を trainer にそのまま渡します。このモデルは選択コーパスから文字単位語彙を生成するため、SpikingEvoTextLM の外部 Tokenizer 選択は適用されません。
  • MultiModal、Vision、Audio のページは異なる trainer/data contract を使うため、テキスト専用の architecture、neuron、Tokenizer の設定を模倣して表示しません。各ページは実トレーナーが受理する項目だけを送信します。
  • Vision Encoder は dataset、output dimension、time steps、learning rate、batch size、epoch 数、artifact name、model category/variant、precision、量子化、privacy level を train_vision_encoder.py に渡します。
  • Audio Encoder は audio category、MFCC feature 数、MFCC sequence length、output neuron 数、time steps、learning rate、batch size、epoch 数、artifact name、precision、量子化、privacy level を train_audio_encoder.py に渡します。テスト用の合成データは利用者が明示的に選択した場合だけ作成されます。
  • MultiModal LM は image-caption dataset、d_model、head 数、block 数、SNN time steps、caption sequence length、learning rate、batch size、epoch 数、artifact metadata を train_multi_modal_lm.py に渡します。このトレーナーは現在ローカル checkpoint を再開する base_model_path を受理しないため、画面には継続学習の入力欄を表示しません。
  • Audio/Vision ページおよび MultiModal の Audio には、実トレーナーを起動しない旧 generic API の画面が残っていますが、誤ったジョブ送信を防ぐため起動ボタンを無効化しています。実行には Model Training タブを使用します。

Vision

  • Models: ViT, ResNet, CLIP
  • Features: Image classification, object detection
  • Use Cases: Image recognition, visual QA

Audio

  • Models: Whisper, Wav2Vec2
  • Features: Speech recognition, audio classification
  • Use Cases: Transcription, voice commands

MultiModal

  • Models: CLIP, LLaVA
  • Features: Text-image understanding
  • Use Cases: Visual question answering, image captioning

Configuration

Training Configuration (config/training_config.yaml)

# Model configurations for each category
langtext:
  model_name: "microsoft/DialoGPT-medium"
  max_length: 512

vision:
  model_name: "google/vit-base-patch16-224"
  num_labels: 1000

audio:
  model_name: "openai/whisper-small"
  language: "en"

multimodal:
  model_name: "openai/clip-vit-base-patch32"

# Training parameters
training:
  epochs: 3
  batch_size: 8
  learning_rate: 2e-5

Docker Commands

Build and Run Manually

# GPU
docker build -f Dockerfile.train.gpu -t llm-trainer-gpu .
docker run -p 8002:8000 -v $(pwd)/data:/app/data llm-trainer-gpu

# CPU
docker build -f Dockerfile.train.cpu -t llm-trainer-cpu .
docker run -p 8001:8000 -v $(pwd)/data:/app/data llm-trainer-cpu

Using Docker Compose

# Start all services
docker-compose -f docker-compose.train.yml up -d

# View logs
docker-compose -f docker-compose.train.yml logs -f

# Stop services
docker-compose -f docker-compose.train.yml down

Monitoring and Troubleshooting

Check Server Status

./scripts/train_launcher.sh status

View Logs

./scripts/train_launcher.sh logs gpu
./scripts/train_launcher.sh logs cpu

Test API

./scripts/train_launcher.sh test

Common Issues

  1. CUDA out of memory: LanguageMode では容量表示を確認し、利用者が batch size またはモデル構成を明示的に縮小して新しいジョブを開始する。Core は実行中の構成を自動変更しない。
  2. Port conflicts: Change ports in docker-compose.yml
  3. Model download fails: Check internet connection and Hugging Face access
  4. NVIDIA Docker not available: Use CPU mode or install NVIDIA Docker

Advanced Usage

Custom Model Training

Modify config/training_config.yaml to use different models:

langtext:
  model_name: "meta-llama/Llama-2-7b-hf"  # Requires access token

Scaling

For production deployment, consider: - Kubernetes for orchestration - Model versioning with MLflow - Distributed training with Accelerate - GPU resource management

Web UI Integration

The LLM Training System is fully integrated with the EvoSpikeNet Web UI, providing user-friendly interfaces for training different types of models.

Vision Encoder Training UI

Location: frontend/pages/vision_encoder.py

Features: - API Training Tab: Dedicated tab for LLM training via REST API - Category Selection: Dropdown to select model category (LangText, Vision, Audio, MultiModal) - Dynamic Type/Category Display: Shows selected model type and category in real-time - Training Parameters: Configurable epochs, batch size, learning rate, run name - GPU Support: Checkbox to enable/disable GPU training - Training Status: Real-time status updates and output display

UI Components:

- vision-category-dropdown: Category selection (LangText/Vision/Audio/MultiModal)
- vision-selected-type-category: Dynamic display of model type and category
- vision-new-epochs-input: Number of training epochs
- vision-new-batch-size-input: Training batch size
- vision-new-learning-rate-input: Learning rate
- vision-new-run-name-input: Custom run name
- vision-new-gpu-checkbox: GPU training toggle
- vision-new-training-output: Training output display
- vision-new-training-status: Status messages

Audio Encoder Training UI

Location: frontend/pages/audio_encoder.py

Features: - API Training Tab: Dedicated tab for LLM training via REST API - Category Selection: Dropdown to select model category (LangText, Vision, Audio, MultiModal) - Dynamic Type/Category Display: Shows selected model type and category in real-time - Training Parameters: Configurable epochs, batch size, learning rate, run name - GPU Support: Checkbox to enable/disable GPU training - Training Status: Real-time status updates and output display

UI Components:

- audio-category-dropdown: Category selection (LangText/Vision/Audio/MultiModal)
- audio-selected-type-category: Dynamic display of model type and category
- audio-new-epochs-input: Number of training epochs
- audio-new-batch-size-input: Training batch size
- audio-new-learning-rate-input: Learning rate
- audio-new-run-name-input: Custom run name
- audio-new-gpu-checkbox: GPU training toggle
- audio-new-training-output: Training output display
- audio-new-training-status: Status messages

Integration with Distributed Brain

The UI components automatically map categories to appropriate model types: - LangTexttext model type - Visionvision model type - Audioaudio model type - MultiModalmultimodal model type

This ensures that training jobs are submitted with the correct parameters for the distributed brain node configuration.

API Endpoints Used

The UI integrates with the following training API endpoints: - POST /train: Submit training job - Training jobs are submitted with category-specific model configurations - Real-time status updates via callback functions

License

This project is part of EvoSpikeNet and follows the same licensing terms.