Storeを別マシンへ運ぶ¶
手元のPCで作った入力をスーパーコンピューターへ送る、計算結果を手元へ戻す、といった移動は、
Storeのファイルをrsyncで写して索引を作り直すだけで済みます。このページはその手順と、成り立たせている約束をまとめます。
手順¶
# 送り元:送るファイルの一覧を作る
sopran-store --data-root /path/to/sopran_data sync-list > files.txt
# 転送する
rsync -av --delay-updates --files-from=files.txt /path/to/sopran_data/ host:/data/sopran_data/
# 送り先:索引を作り直し、欠けや破損を確かめる
ssh host sopran-store --data-root /data/sopran_data rebuild
ssh host sopran-store --data-root /data/sopran_data verify
--delay-updatesは、転送したファイルを最後にまとめて置き換えるrsyncのオプションです。
転送途中のStoreを別のジョブが読んでも、ファイルが半端な状態になりません。
送るものを選ぶ¶
sync-listは既定で、SOPRANが自動で作り再利用するデータセット(managed=True)だけを並べます。
軌道幾何・磁力線の接続・LRS・ピッチ角スペクトルのキャッシュ、データの有無の集計がこれに当たります。
# データセットIDやその先頭部分を指定する(managedでなくても対象になる)
sopran-store --data-root /path/to/sopran_data sync-list \
--dataset experimental.kaguya.er.paired_distributions > files.txt
# 元ファイルの一部も加える
sopran-store --data-root /path/to/sopran_data sync-list --raw spice > files.txt
--layer、--variantで層と計算条件を絞れます。--allは試行錯誤中のものを含む全データセットを対象にします。
運べる理由¶
Storeは次の約束を守るように書いています。送り先のルートのパスが違っても、同じデータセットとして使えます。
- 参照はルートからの相対パス。 マニフェストやカタログに絶対パスを書きません。Storeの外にあるファイルは、 チェックサムと元の場所の手がかりとして記録するだけで、探索には使いません。
- キャッシュのIDは内容から決まる。
variant_idは設定と入力(元ファイルのチェックサムやSPICEカーネルの名前・ハッシュ・サイズ)から作ります。 同じ処理はどの計算機でも同じIDになり、運んだ結果がそのまま再利用されます。 - シャードの付属JSONが正本。 各シャードは一時ファイルに書いてから名前を変え、隣に
<shard>.sopran.jsonを置きます。catalog.parquetはそこから作り直せる索引です。別の計算機やジョブが同じデータセットの別シャードを書いても、 運んだ後にrebuildすれば合流します。 - 計算機ごとのものは運ばない。
registry/、cache/、データセットのwork/、*.sopran-tmp*、*.sopran-bak*は 同期の対象外です。registry/はマニフェストの変化を検知して自動で作り直されます。 除外パターンはsopran-store excludesで表示でき、rsync --exclude-fromに渡せます。
rebuildは、付属JSONの無い古いデータセットにも付属JSONを作ります(移行)。
Pythonから行う¶
| コマンド | Python |
|---|---|
rebuild |
store.rebuild()、record.rebuild_catalog() |
verify |
record.verify_shards() |
| Store外のファイルの参照を作る | store.file_reference(path) |
コマンドのオプションはコマンドラインにまとめています。