Downloads · 30 days
7
11% of all-time downloads
webbigdata/nanochat-jp_base
nanochat-jp_base is a machine learning model from webbigdata. Use it for the machine learning task on the model card, and read the license before you ship it in a product. The card lists the license as mit.
karpathyさん(元スタンフォード、元テスラ、元OpenAI)の教育目的PJであるnanochat のd20版を日本語データ kajuma/ABEJA-CC-JA-edu 10% を使って事前学習させたモデルです。
Downloads · 30 days
7
11% of all-time downloads
All-time downloads
63
Public
Repo size
2.1 GB
Likes
3
Public
Click a slice to open those files.
.pt2.1 GB · 100%
From the Hugging Face model README
karpathyさん(元スタンフォード、元テスラ、元OpenAI)の教育目的PJであるnanochat のd20版を日本語データ kajuma/ABEJA-CC-JA-edu 10% を使って事前学習させたモデルです。
事前学習のみのため、入力された文章の続きを書く事(補完)しかできませんが、日本語が問題なく補完できることは確認済です。
このリポジトリに格納されているモデルをホームディレクトリ(~/.cache/nanochat/)に
として配置する事で、学習の続きとしてmid train(中間学習), SFT(教師あり微調整), RL(強化学習)を実行する事ができると思います。
中間学習, 教師あり微調整, 強化学習は比較的少ないデータで実行可能なのでノード数とバッチサイズを減らせばH100 x 8台をレンタルせずともローカルPCなどで試行錯誤が実行可能です。
Linux 前提です。文章の続きの補完のみです。
# test_pretrained_jp.py
import os
import sys
sys.path.append(os.getcwd())
import torch
from nanochat.common import get_base_dir
from nanochat.checkpoint_manager import load_model_from_dir
# --- 設定 ---
MODEL_DIR_NAME = "base_checkpoints_jp"
MODEL_TAG = "d20"
STEP = None
MAX_NEW_TOKENS = 100
TEMPERATURE = 0.7
TOP_K = 50
# --- メイン実行部 ---
if __name__ == "__main__":
print("--- 事前学習済み日本語モデル テストスクリプト ---")
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(f"使用デバイス: {device}")
use_bf16 = (device == 'cuda' and torch.cuda.is_bf16_supported())
autocast_ctx = torch.amp.autocast(device_type=device, dtype=torch.bfloat16, enabled=use_bf16)
if use_bf16:
print("bfloat16がサポートされています。混合精度で推論を実行します。")
base_dir = get_base_dir()
checkpoints_dir = os.path.join(base_dir, MODEL_DIR_NAME)
print(f"モデルを次のパスから読み込みます: {os.path.join(checkpoints_dir, MODEL_TAG)}")
if not os.path.exists(os.path.join(checkpoints_dir, MODEL_TAG)):
print("\nFATAL: モデルディレクトリが見つかりません。")
print(f"ローカルの '{checkpoints_dir}' 以下に 'd20' などのディレクトリとしてモデルファイルが配置されているか確認してください。")
sys.exit(1)
model, tokenizer, meta = load_model_from_dir(
checkpoints_dir, device, phase="eval", model_tag=MODEL_TAG, step=STEP
)
print("\nモデルとトークナイザーのロードが完了しました。")
print("事前学習済みモデルは、対話ではなく『文章の続き』を生成します。")
while True:
try:
user_input = input("\nプロンプトを入力してください (終了するにはCtrl+C): ")
if not user_input:
continue
prompt_tokens = tokenizer.encode(user_input, prepend=tokenizer.get_bos_token_id())
print("-" * 30)
print("生成開始...")
print("入力プロンプト: ", user_input, end="")
with torch.no_grad():
with autocast_ctx:
stream = model.generate(prompt_tokens, max_tokens=MAX_NEW_TOKENS, temperature=TEMPERATURE, top_k=TOP_K)
for token in stream:
print(tokenizer.decode([token]), end="", flush=True)
print("\n" + "-" * 30)
except KeyboardInterrupt:
print("\n終了します。")
break
except Exception as e:
print(f"\nエラーが発生しました: {e}")
break
Run started: 2025-10-16 16:25:24
timestamp: 2025-10-16 16:25:26
| Text Type | Bytes | GPT-2 Tokens | GPT-2 Ratio | Ours Tokens | Ours Ratio | Relative Diff % |
|---|---|---|---|---|---|---|
| news | 1819 | 404 | 4.50 | 705 | 2.58 | -74.5% |
| korean | 893 | 745 | 1.20 | 729 | 1.22 | +2.1% |
| code | 1259 | 576 | 2.19 | 708 | 1.78 | -22.9% |
| math | 1834 | 936 | 1.96 | 1063 | 1.73 | -13.6% |
| science | 1112 | 260 | 4.28 | 455 | 2.44 | -75.0% |
| japanese | 3618 | 2056 | 1.76 | 630 | 5.74 | +69.4% |
| Text Type | Bytes | GPT-4 Tokens | GPT-4 Ratio | Ours Tokens | Ours Ratio | Relative Diff % |
|---|---|---|---|---|---|---|
| news | 1819 | 387 | 4.70 | 705 | 2.58 | -82.2% |
| korean | 893 | 364 | 2.45 | 729 | 1.22 | -100.3% |
| code | 1259 | 309 | 4.07 | 708 | 1.78 | -129.1% |
| math | 1834 | 832 | 2.20 | 1063 | 1.73 | -27.8% |
| science | 1112 | 249 | 4.47 | 455 | 2.44 | -82.7% |
| japanese | 3618 | 1458 | 2.48 | 630 | 5.74 | +56.8% |
timestamp: 2025-10-16 16:17:09
以下の方たちのお力添えがなければこのモデルは完成しませんでした。ありがとうございます!