SDK Sparse Event-Memory LM ガイド
目的
このガイドは、SDKからSparseEventMemoryLMを構築し、局所学習を実行し、再開可能なアーティファクトをAPIへ送信する方法を示します。対象実装はEvoSpikeNet-Core/evospikenet/sdk/sparse_event_memory.pyです。
このモデルは、密なSpikingEvoTextLM/ChronoSpikeAttention経路とは別です。主CSRシナプスはINT8 bufferであり、Adamは共有語彙基底、ルータ、低ランクアダプタ、正規化層だけを更新します。
SDK公開API
evospikenet.sdkから以下を直接インポートできます。
| API | 用途 |
|---|---|
SparseEventMemoryConfig |
モデル・checkpoint用の直列化可能な構成 |
build_sparse_event_memory_model() |
構成からモデルを生成し、必要ならデバイスへ移動 |
create_sparse_event_memory_artifact_payload() |
state dict、config.json、memory_report.jsonをメモリ上で作成 |
upload_sparse_event_memory_artifacts() |
3つのアーティファクトをSDK APIへ送信 |
ローカル学習と可塑性
import torch
from evospikenet.sdk import SparseEventMemoryConfig, build_sparse_event_memory_model
config = SparseEventMemoryConfig(
vocab_size=32768,
d_model=2048,
num_transformer_blocks=12,
factor_rank=128,
connectivity=0.005,
num_experts=2,
router_top_k=1,
adapter_rank=16,
)
model = build_sparse_event_memory_model(config, device="cuda")
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
# input_tokens / target_tokens: (batch, sequence) の整数トークンID
optimizer.zero_grad(set_to_none=True)
loss = model.sampled_cross_entropy(input_tokens, target_tokens, negative_samples=1024)
loss.backward()
optimizer.step()
local_updates = model.apply_local_plasticity()
apply_local_plasticity()はAdamの成功後に必ず実行します。これは主INT8 CSR値を局所Hebbian則で更新し、記録された活動統計を解放します。学習ステップを中断した場合はclear_local_plasticity()を呼び出します。
SDKデモアプリケーション
EvoSpikeNet-Core/examples/sdk/programs/sparse_event_memory_sdk_demo.py は、日本語トークナイザーで短い文をtokenizeし、sampled softmax学習、局所可塑性、メモリ報告を行います。
cd EvoSpikeNet-Core
python examples/sdk/programs/sparse_event_memory_sdk_demo.py \
--text "スパイキング言語モデルの局所可塑性を検証します。" \
--steps 3
主なオプション:
| オプション | 既定値 | 内容 |
|---|---|---|
--tokenizer-name |
cl-tohoku/bert-base-japanese-v3 |
tokenizer名またはローカルパス |
--device |
CUDA利用可能時はcuda |
実行デバイス |
--d-model |
64 |
デモの状態次元 |
--num-blocks |
2 |
疎イベントブロック数 |
--connectivity |
0.05 |
CSR行ごとの接続密度 |
--negative-samples |
128 |
sampled softmaxの負例数 |
--steps |
3 |
ローカル学習ステップ数 |
--upload |
false | SDK APIへアーティファクトを送信 |
APIへのアーティファクト送信
--uploadを指定すると、デモはEvoSpikeNetAPIClientを使ってログセッションを作成し、以下をllm_type="SparseEventMemoryLM"として送信します。
| 種別 | ファイル | 内容 |
|---|---|---|
model |
sparse_event_memory_lm.pth |
重みとINT8 CSR bufferを含むstate dict |
config |
config.json |
architecture: sparse_event_memoryを含む再開用構成 |
log |
memory_report.json |
trainable parameter数と固定CSR保持量 |
python examples/sdk/programs/sparse_event_memory_sdk_demo.py \
--upload \
--base-url http://localhost:8000 \
--api-key "$EVOSPIKENET_API_KEY"
トークナイザーはアプリケーション側の管理対象です。アーティファクト保管時に必要なら、既存のupload_artifact()でtokenizer archiveを別途送信し、同じllm_typeを指定してください。
再開時の注意
config.jsonのarchitectureがsparse_event_memoryであることを確認してから、SparseEventMemoryConfigとbuild_sparse_event_memory_model()で同じ構造を作成し、load_state_dict()を呼び出します。密なSpikingEvoTextLMのcheckpointとは互換ではありません。
制約
memory_report()は保持領域の報告であり、activation、optimizer、sparse kernel workspaceを含むピークVRAM保証ではありません。- PyTorchのCSR演算はbetaであり、GPU性能と対応演算はPyTorch/CUDAの組み合わせに依存します。
forward()は全語彙logitsを生成します。学習にはVRAMを抑えるsampled_cross_entropy()を使用してください。- このSDK helperは整数text token用です。画像、波形、MFCC、または
SpikingEvoMultiModalLMのdense融合checkpointを直接入力できません。音声・画像・マルチモーダル対応はMEMERIED SpikeNetLM計画の未実装範囲です。