Download source/scripts/posttraining/prepare_handoff.py from Voltline/vimeml-tiny-ja-v4.2: direct link, hf CLI and curl.
- Browser
- Download file 4.04 kB
-
https://huggingface.co/Voltline/vimeml-tiny-ja-v4.2/resolve/main/source/scripts/posttraining/prepare_handoff.py
- Command line
-
hf download hf://Voltline/vimeml-tiny-ja-v4.2/source/scripts/posttraining/prepare_handoff.py
-
curl -L -o prepare_handoff.py https://huggingface.co/Voltline/vimeml-tiny-ja-v4.2/resolve/main/source/scripts/posttraining/prepare_handoff.py
4.04 kB
| """Freeze a small code archive and explicit, checksummed AutoDL payload list. | |
| No SSH, uploads, credential reads, model execution or training. Existing server | |
| files with matching SHA256 can be reused when a later upload is authorized. | |
| """ | |
| import argparse | |
| import json | |
| from pathlib import Path | |
| import sys | |
| import tarfile | |
| import tomllib | |
| ROOT = Path(__file__).resolve().parents[2] | |
| sys.path.insert(0, str(ROOT / "src")) | |
| def main(): | |
| from vimeml.posttraining.train import build_plan | |
| from vimeml.posttraining.infer import TRACKS, read_snapshot | |
| from vimeml.training.data import file_sha, write_json | |
| parser = argparse.ArgumentParser(description=__doc__) | |
| parser.add_argument("--output", type=Path, default=ROOT / "outputs/handoff-v4-c1") | |
| parser.add_argument("--config", type=Path, default=ROOT / "configs/posttrain-v4-c1.toml") | |
| args = parser.parse_args() | |
| config_path = args.config.resolve() | |
| config = tomllib.loads(config_path.read_text(encoding="utf-8")) | |
| plan = build_plan(config, verify_files=True) | |
| code = sorted((ROOT / "src/vimeml").rglob("*.py")) | |
| code += sorted((ROOT / "scripts/posttraining").glob("*.py")) | |
| code += [ROOT / "scripts/posttraining/autodl_v4_c1.sh", config_path] | |
| code += [ROOT / name for name in ("requirements.txt", "requirements-autodl.txt", "pyproject.toml", "README.md", "LICENSE")] | |
| code += [ROOT / name for name in ("docs/zh-CN/posttraining-v4.md", "docs/zh-CN/data-v4-c1.md", | |
| "docs/posttraining-v4.md", "docs/data-v4-c1.md")] | |
| data = [ROOT / p for p in plan["required_files"]] | |
| data += [ROOT / config["conversion_dir"] / name for name in ("manifest.json", "acceptance.json")] | |
| data += [ROOT / config["token_dir"] / "manifest.json", ROOT / config["index_dir"] / "manifest.json", | |
| ROOT / config["tokenizer_dir"] / "tokenizer.model", ROOT / config["initialization"]["checkpoint"]] | |
| for track in TRACKS: | |
| read_snapshot(track) | |
| data.append(ROOT / f"outputs/evaluation-v4-20261015/inputs/{track}.json") | |
| args.output.mkdir(parents=True, exist_ok=True) | |
| code = sorted(set(code)) | |
| data = sorted(set(data)) | |
| archive = args.output / "v4-c1-code.tar.gz" | |
| def clean(info): | |
| info.uid = info.gid = info.mtime = 0 | |
| info.uname = info.gname = "" | |
| info.mode = 0o755 if info.name.endswith(".sh") else 0o644 | |
| return info | |
| with tarfile.open(archive, "w:gz") as bundle: | |
| for path in code: | |
| bundle.add(path, arcname=path.relative_to(ROOT).as_posix(), recursive=False, filter=clean) | |
| payload = [{"path": p.relative_to(ROOT).as_posix(), "bytes": p.stat().st_size, "sha256": file_sha(p)} for p in data] | |
| result = {"format": "vimeml_v4_c1_handoff_v1", "code_archive": {"name": archive.name, "bytes": archive.stat().st_size, | |
| "sha256": file_sha(archive)}, "code_files": {p.relative_to(ROOT).as_posix(): file_sha(p) for p in code}, | |
| "payload_files": payload, "payload_bytes": sum(x["bytes"] for x in payload), | |
| "new_conversion_binary_bytes": sum(x["bytes"] for x in payload if x["path"].startswith(config["conversion_dir"]) and x["path"].endswith(".bin")), | |
| "source_step": 584000, "max_steps": plan["settings"]["max_steps"], "signatures": plan["signatures"], | |
| "purpose": "Frozen upload inventory; reuse identical remote files. No raw corpus, annotation dictionaries, credentials or blind data.", | |
| "training_started": False, "remote_operations": False} | |
| write_json(args.output / "manifest.json", result) | |
| write_json(args.output / "training-plan.json", plan) | |
| print(json.dumps({"output": str(args.output), "archive_bytes": result["code_archive"]["bytes"], | |
| "payload_files": len(payload), "payload_GiB": result["payload_bytes"] / 2**30, | |
| "new_conversion_binary_MiB": result["new_conversion_binary_bytes"] / 2**20, | |
| "max_steps": result["max_steps"]}, indent=2)) | |
| if __name__ == "__main__": | |
| main() | |