Hugging Faceモデルのcold・hot間転送
GLM-5-GGUFのblobsをrclone、snapshotsとrefsをrsyncで転送する手順です。ローカルLLM導入のモデル配置で、symlink保持と転送後の確認を扱います。
転送するモデルと方法
GLM-5-GGUF を保管用の cold から推論用の hot に移す手順を整理しました。実体ファイルの blobs は rclone、参照構造の snapshots と refs は rsync でコピーします。
ローカルLLM導入では、保管するモデルと稼働に使うモデルを分けて置きます。この手順は、その配置を変えながら Hugging Face の参照構造を保つためのものです。
hubディレクトリの構造
Hugging Face の hub 形式では、容量の大半は blobs にあります。revision の解決には snapshots と refs も必要です。
大きいファイルの並列転送と symlink の保存を、別々のツールに任せます。
前提
モデルと転送元・転送先のパスを指定します。
BASE="models--unsloth--GLM-5-GGUF"
SRC_BASE="/srv/archive/cold/hf/hub/$BASE"
DST_BASE="/srv/archive/hot/hf/hub/$BASE"
mkdir -p "$DST_BASE"
/srv/archive/cold/hf/hub/ が保管側、/srv/archive/hot/hf/hub/ が利用側です。別モデルでは主に BASE を変更します。
rcloneでblobsを並列複製
実体ファイルの blobs を rclone copy でコピーします。
rclone copy "$SRC_BASE/blobs" "$DST_BASE/blobs" \
--exclude "*.incomplete" \
--transfers 16 --checkers 32 \
--local-no-check-updated \
-P
開始値は --transfers 16 --checkers 32 です。10GbE + SSD では 32/64 まで増やす余地があります。
.incomplete を除外し、未完了ファイルが hot 側に混ざることを防ぎます。
rsyncでsnapshotsをsymlinkのまま複製
次に snapshots をコピーします。
mkdir -p "$DST_BASE/snapshots"
rsync -aH --info=progress2 \
--exclude="*.incomplete" \
"$SRC_BASE/snapshots/" "$DST_BASE/snapshots/"
rsync -aH で symlink を辿らずに保存します。snapshots から blobs への参照を、そのまま複製するためです。
--info=progress2 で進捗を表示します。ここでも .incomplete を除外しています。
rsyncでrefsも複製
参照名の解決に使う refs もコピーします。
mkdir -p "$DST_BASE/refs"
rsync -aH --info=progress2 \
"$SRC_BASE/refs/" "$DST_BASE/refs/"
ファイル本体と revision のディレクトリだけでは、参照名で解決できない場合があるためです。
最低限の整合チェック
転送後、リンク切れを確認します。
find "$DST_BASE/snapshots" -type l ! -exec test -e {} \; -print | head
出力がなければ、snapshots の symlink 切れは検出されていません。全ファイルの完全性を検証するチェックではありません。
特定revisionと量子化のコピー
特定 revision の量子化だけが必要なら、snapshots 配下を絞ります。
REV="acc91597d28b7ebd3a8c20fd5331ceaf07a4ece1"
mkdir -p "$DST_BASE/snapshots/$REV"
rsync -aH --info=progress2 \
"$SRC_BASE/snapshots/$REV/IQ4_NL/" "$DST_BASE/snapshots/$REV/IQ4_NL/"
例えば IQ4_NL のみを hot 側に置けます。全体のコピーを避けるための方法です。
部分コピーでは、hot 側に置く revision と量子化を決めておく必要があります。
別モデルへの適用
DeepSeek-V3.2-Speciale に使う場合は BASE= を変えます。
モデル名が変わっても、次の分担は同じです。
- 実体ファイルの
blobsはrclone - symlink と参照構造を持つ
snapshots/refsはrsync
この分担で、実体の転送と hub の参照構造を扱います。
手順の要点
手順の要点です。
blobsは並列転送しやすいのでrclone copysnapshotsとrefsは構造保持のためrsync -aH.incompleteは除外して未完了データを持ち込まない- 転送後は
find ... -type l ! -exec test -e {} \;で最低限の整合チェックを行う - 必要なら revision や量子化単位で部分コピーできる
今後の改善
今後、次の確認と運用ルールを追加する予定です。
blobsの件数やサイズ差分確認を追加して、転送完了判定をもう一段明確にする- モデルサイズごとに
--transfers/--checkersの目安を残す - hot 側へ置く revision と量子化の選び方を別メモで固定する
cold / hot の用途に合わせ、転送対象の選び方も記録する方針です。
