zxell.ai
開発記録 / review19
この記録は、プロジェクトの作業報告(報告 → アーキテクトの回答)を公開用に編集したものです。サーバ運用・セキュリティに関わる部分を省略しています(編集方針)。

review19: (省略: 新サーバへの移行) / フェーズ1前処理を完全再構築 — 6.15Bトークン・125シャード / RTX 3060 で計画前倒しへ

作成日: 2026-09-05 対象: 新サーバ(Ryzen 3 4300U)移行後の初作業日。(省略: 移行作業とサーバ障害への対応)、フェーズ1 前処理の作り直し完了までの報告。

要旨: 本日でプロジェクトは故障前より良い状態に戻りました。

  1. コーパス原本は無傷で生存(バックアップのコピーが sha256 完全一致)。内蔵ディスクにも二重化した
省略: 要旨 2(サービス停止の原因)
  1. フェーズ1 の前処理を最初から最後まで再構築: スナップショット → トークナイザ(48k 採用)→ 全量トークン化 → 125 シャード・6.15B トークン。全段階で検証合格、8/13 の数値と完全一致
  2. サイトを二言語化(/ と /ja/)し、モデル構成図・推論フロー図を両言語で埋め込み公開
省略: 要旨 5(git の名義変更)
  1. 【要判断】時系列分割の val/test が 100% 日本語になる問題を発見(7 章)。学習開始前に分割の再設計が必要

省略: 1〜3 章(旧サーバのディスク故障の影響、サーバ移行、ドメインの停止とその原因)

4. サイト二言語化と構成図の公開

ご依頼の件、完了・公開済みです(コミット 42b120e → 名義変更後 edec793)。

省略: 5 章(git の名義変更)

6. フェーズ1 前処理の完全再構築 — 本日のメインディッシュ

review18 6 章の方針(「work/ 配下は流用せず、トークナイザから作り直し」)を完遂しました。 全段階で「書き込み後の読み直し検証」を実施し、故障機での 8/13 の数値と突き合わせています。

6-1. スナップショット再生成(parse_dump.py)— 45 分(旧機 2 時間 50 分)

項目今回(健全 RAM)8/13(故障 RAM 機)
記事数 / id 範囲7,969,236 / 159〜8,359,308完全一致
NULL 本文 / 置換文字 / channels45,889 / 798 / 803完全一致
読み直し検証CRC・sha256 一致(合格)CRC 不一致(破損)

統計の完全一致により「8/13 のパース処理は正しく、破損は書き込み後」という review16 の分析が裏付けられました。出力は内蔵ディスク。

6-2. サンプル抽出(extract_sample.py 改修)— 5 分

MySQL 喪失に伴いスナップショット読みに書き換え(抽出条件・整形・重複除去は旧版と同一。コミット 16b4406)。言語別の docs/chars は 8/13 の稼働 DB 版と 0.2% 以内で一致(差分は稼働 DB に 1.7 万件多かった分で説明がつく)。

6-3. トークナイザ学習・比較 — 48k/64k 各 90 秒(旧機の見込み数十分)

AVX2 の効果が予想以上でした。結果は 8/13 のレポートと chars/token が小数第 3 位まで完全一致:

モデルendefrja推定総トークン
48k(採用)4.185 字/tok4.1813.8001.9456.14B
64k4.2894.3493.9222.0335.96B

採用判断も従来どおり 48k(64k は総トークンを 3% 減らすだけで、S モデルでは埋め込みが 33% 太る)。

6-4. 分割境界の再実測(boundaries.json)

旧 boundaries.json(8/13・work/ 産物)は使わず、スナップショット全走査で再計算:

6-5. 全量トークン化+シャード化(tokenize_full.py)— encode 70 分 + シャード 50 分

rows_scanned          7,969,236  (全行)
dup_links_skipped       420,934  (5.3% — phase0 実測の重複率と一致)
empty_skipped            41,641
異常・スナップショット損傷      0
出力: 125 シャード(train 123 / val 1 / test 1)・6.152B トークン
置き場所: サーバの配布ディレクトリ(各 50M トークン ≈100MB + sha256 付きメタ JSON)

これでフェーズ1 の前処理は完了です。学習可能なシャードがサーバの配布ディレクトリに揃いました。

7. 【重要・要判断】val/test が 100% 日本語になっています

シャードのメタデータ検証で発見しました。これは学習開始前に直すべき問題です。

val_000.bin : 1.15M トークン・2,667 記事 — 言語構成 {ja: 100%}
test_000.bin: 3.80M トークン・8,734 記事 — 言語構成 {ja: 100%}

原因は明快で、2023-10 以降まで収集が生きていたのは日本語フィードだけだったためです(en/de/fr のフィードはそれ以前に停止)。単一の時系列境界で切ると、末尾 4 か月 = ほぼ日本語だけが val/test に入ります。

このままでは「言語別パープレキシティ」「en/de/fr の要約評価」(成功基準 1.2)が val/test で測れません。対応案:

A の実装は tokenize_full.py の境界判定を言語別辞書にするだけで、再実行は encode からやり直し(約 2 時間)です。ご判断ください(確認事項 1)。

8. クライアント体制の再評価(RTX 3060 の合流)

RTX 3060(12GB・Ubuntu Server・memtest 済み)+ GTX 1050(2GB)の 2 台体制が確定(1050 の 1 台は 3060 で置き換え)。roadmap 10 章に反映済みの要点:

学習対象旧見積(1050×2)新体制
S (30M)約 6 日3060 単独 約 1 日 / 分散実験は 3060+1050
M (125M)約 57 日3060 単独 約 1 週間
L (500M)約 230 日(非現実的)3060 単独 約 1 か月 — 実現可能圏内に

9. その他の本日の作業

検証の限界を正直に: シャードの sha256 全数再検証はしていません(抜き打ち 1 個+書き込み時の自動検証のみ)。また新サーバは memtest 4 パス合格ですが、旧機の教訓に従い、学習開始後も定期的な checksum 照合を運用に組み込みます。

10. 確認事項

  1. val/test の分割方針(7 章): A(言語別境界・推奨)/ B(ランダム)/ C(現状維持)のどれにしますか? A なら次回、境界の言語別再実測 → encode からの再実行(約 2 時間)を行います。
省略: 確認事項 2・3(原本コピーの置き場所、旧サーバ機の処分)

11. 次の作業予定

  1. 確認事項 1 の回答を受けて val/test 分割を確定 → 必要なら再シャード化
  2. S(30M)モデルの実装(モデル定義・学習ループ・チェックポイント形式)
  3. RTX 3060 機のクライアント環境構築(PyTorch CUDA)→ シャード取得 → S ベースライン学習開始(フェーズ 1 の完了判定へ)
  4. 評価ハーネス(言語別パープレキシティ・ROUGE 雛形)
← review16目次review20 →