Download source/scripts/deployment/coreml_v2.py from Voltline/vimeml-tiny-ja-v2.1: direct link, hf CLI and curl.
- Browser
- Download file 3.22 kB
-
https://huggingface.co/Voltline/vimeml-tiny-ja-v2.1/resolve/main/source/scripts/deployment/coreml_v2.py
- Command line
-
hf download hf://Voltline/vimeml-tiny-ja-v2.1/source/scripts/deployment/coreml_v2.py
-
curl -L -o coreml_v2.py https://huggingface.co/Voltline/vimeml-tiny-ja-v2.1/resolve/main/source/scripts/deployment/coreml_v2.py
3.22 kB
| """Independent V2 deployment stages; preserve all experiment directories.""" | |
| import argparse | |
| import json | |
| import sys | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parents[2] | |
| sys.path.insert(0, str(ROOT / "src")) | |
| import torch | |
| from vimeml.deployment import v2 | |
| def main(): | |
| parser = argparse.ArgumentParser(description=__doc__) | |
| parser.add_argument("--threads", type=int, default=4) | |
| stages = parser.add_subparsers(dest="stage", required=True) | |
| export = stages.add_parser("export") | |
| export.add_argument("--checkpoint", type=Path, required=True) | |
| export.add_argument("--tokenizer", type=Path, required=True) | |
| export.add_argument("--token-manifest", type=Path, required=True) | |
| convert = stages.add_parser("convert") | |
| convert.add_argument("--bundle", type=Path, required=True) | |
| compress = stages.add_parser("compress") | |
| compress.add_argument("--source", type=Path, required=True) | |
| compress.add_argument("--alignment", type=Path, required=True) | |
| align = stages.add_parser("align") | |
| align.add_argument("--reference", type=Path, required=True) | |
| evaluate = stages.add_parser("evaluate") | |
| evaluate.add_argument("--benchmark", type=Path, required=True) | |
| evaluate.add_argument("--baseline", type=Path, required=True) | |
| samples = stages.add_parser("samples") | |
| samples.add_argument("--baseline", type=Path, required=True) | |
| fixtures = stages.add_parser("device-fixtures") | |
| for command in (align, evaluate, samples, fixtures): | |
| command.add_argument("--bundle", type=Path, required=True) | |
| command.add_argument("--model", type=Path) | |
| for command in (export, convert, compress, align, evaluate, samples, fixtures): | |
| command.add_argument("--output", type=Path, required=True) | |
| args = parser.parse_args() | |
| if args.threads < 1 or args.output.exists(): | |
| parser.error("Positive threads and a fresh output path are required.") | |
| torch.set_num_threads(args.threads) | |
| if args.stage == "export": | |
| v2.export_bundle(args.checkpoint, args.tokenizer, args.token_manifest, args.output) | |
| elif args.stage == "convert": | |
| v2.convert(args.bundle, args.output) | |
| elif args.stage == "compress": | |
| v2.compress(args.source, args.output, args.alignment) | |
| else: | |
| lm = v2.CoreMLLM(args.bundle, args.model) if args.model else v2.BundleLM(args.bundle) | |
| if args.stage == "align": | |
| report = v2.align(lm, args.reference, args.output) | |
| print(json.dumps(report, ensure_ascii=False, indent=2)) | |
| if not report["passed"]: | |
| raise SystemExit("Strict alignment failed; report preserved. Review ranking quality separately.") | |
| elif args.stage == "evaluate": | |
| report = v2.evaluate(lm, args.benchmark, args.baseline, args.output) | |
| print(json.dumps({"metrics": report["metrics"]["all"], | |
| "comparison": {k: v for k, v in report["comparison"].items() if k != "changes"}}, indent=2)) | |
| elif args.stage == "samples": | |
| v2.samples(lm, args.baseline, args.output) | |
| else: | |
| v2.device_fixtures(lm, args.output) | |
| print(f"Output: {args.output.resolve()}") | |
| if __name__ == "__main__": | |
| main() | |