Instructions to use safffrron/25M2111-Week01-Track2-20-Submission01 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use safffrron/25M2111-Week01-Track2-20-Submission01 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="safffrron/25M2111-Week01-Track2-20-Submission01")# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("safffrron/25M2111-Week01-Track2-20-Submission01", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use safffrron/25M2111-Week01-Track2-20-Submission01 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "safffrron/25M2111-Week01-Track2-20-Submission01" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "safffrron/25M2111-Week01-Track2-20-Submission01", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/safffrron/25M2111-Week01-Track2-20-Submission01
- SGLang
How to use safffrron/25M2111-Week01-Track2-20-Submission01 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "safffrron/25M2111-Week01-Track2-20-Submission01" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "safffrron/25M2111-Week01-Track2-20-Submission01", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "safffrron/25M2111-Week01-Track2-20-Submission01" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "safffrron/25M2111-Week01-Track2-20-Submission01", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use safffrron/25M2111-Week01-Track2-20-Submission01 with Docker Model Runner:
docker model run hf.co/safffrron/25M2111-Week01-Track2-20-Submission01
| """Week-1 Track-2 20% calibrated mixed-bit compression entry points. | |
| The artifact stores exact GPTQ codes and scales for the W3/W4 body, W8 full | |
| attention, 30,000 selected tied embedding/output rows, and a small deterministic | |
| token-string predictor for omitted rows. Zlib wraps that tensor payload | |
| losslessly for checkpoint storage. Restoration produces an ordinary BF16 | |
| Hugging Face checkpoint. | |
| """ | |
| from __future__ import annotations | |
| import json | |
| import importlib.util | |
| import os | |
| import sys | |
| import sysconfig | |
| from pathlib import Path | |
| # This file name is required by the course interface, but ``code`` is also a | |
| # Python standard-library module used by ``pdb`` during PyTorch import. When a | |
| # user runs a wrapper from this directory, Python can resolve this file for both | |
| # names. Publish the stdlib API before importing torch so that the recursive | |
| # ``pdb -> code`` import remains valid. | |
| if __name__ == "code": | |
| _stdlib_code_path = Path(sysconfig.get_path("stdlib")) / "code.py" | |
| _stdlib_code_spec = importlib.util.spec_from_file_location( | |
| "_cs6013_stdlib_code", _stdlib_code_path | |
| ) | |
| if _stdlib_code_spec is None or _stdlib_code_spec.loader is None: | |
| raise ImportError(f"could not load Python stdlib code module: {_stdlib_code_path}") | |
| _stdlib_code = importlib.util.module_from_spec(_stdlib_code_spec) | |
| _stdlib_code_spec.loader.exec_module(_stdlib_code) | |
| for _stdlib_name in ( | |
| "InteractiveInterpreter", | |
| "InteractiveConsole", | |
| "interact", | |
| "compile_command", | |
| ): | |
| globals()[_stdlib_name] = getattr(_stdlib_code, _stdlib_name) | |
| import torch | |
| LOCAL_SRC = Path(__file__).resolve().parent / "src" | |
| if LOCAL_SRC.is_dir() and str(LOCAL_SRC) not in sys.path: | |
| sys.path.insert(0, str(LOCAL_SRC)) | |
| from eaimath.artifact import ( | |
| dequantize_gptq_model, | |
| pack_model_state, | |
| read_trace_corpus, | |
| restore_artifact, | |
| save_artifact, | |
| ) | |
| from eaimath.buckets import BY_NAME | |
| from eaimath.embedding_predictor import fit_token_predictor | |
| from eaimath.model import load_tokenizer | |
| from eaimath.pack import state_dict_bytes | |
| from eaimath.vocab import build_keep_set, token_frequencies | |
| SUBMISSION_HF_REPO = "safffrron/25M2111-Week01-Track2-20-Submission01" | |
| EXPECTED_BITS = {"mlp": 3, "linear_attn": 4, "full_attn": 8, "embed": 8} | |
| def _validated_inputs() -> tuple[Path, Path, dict]: | |
| source = Path( | |
| os.environ.get( | |
| "EAIMATH_B20_GPTQ_SOURCE", "checkpoints/r13_short_gptq_m3l4a8e8" | |
| ) | |
| ) | |
| corpus = Path(os.environ.get("EAIMATH_VOCAB_CORPUS", "data/traces.jsonl")) | |
| if not source.is_dir() or not corpus.is_file(): | |
| raise FileNotFoundError( | |
| "Set EAIMATH_B20_GPTQ_SOURCE to the reproduced m3l4a8e8 GPTQ " | |
| "checkpoint and EAIMATH_VOCAB_CORPUS to the verified trace JSONL." | |
| ) | |
| config_path = source / "experiment_config.json" | |
| if not config_path.is_file(): | |
| raise FileNotFoundError(f"GPTQ experiment config is missing: {config_path}") | |
| config = json.loads(config_path.read_text()) | |
| if config.get("bits") != EXPECTED_BITS: | |
| raise ValueError(f"expected m3l4a8e8, found bits={config.get('bits')}") | |
| if set(config.get("gptq_components", [])) != {"mlp", "linear_attn"}: | |
| raise ValueError("GPTQ source must calibrate both MLP and linear attention") | |
| if config.get("activation_order") != "gar": | |
| raise ValueError("GPTQ source must use the selected GAR activation order") | |
| return source, corpus, config | |
| def convert_from_hf_checkpoint( | |
| model_name: str, | |
| output_path: str, | |
| sparsity: float = 0.5, | |
| ) -> None: | |
| """Pack the reproduced calibrated source into the physical 20% artifact. | |
| Run ``training/reproduce_source.sh`` and | |
| ``compression/reproduce_gptq.sh`` first. ``sparsity`` is accepted for the | |
| supplied course interface but is not used by this dense quantization method. | |
| """ | |
| _ = sparsity | |
| source, corpus, source_config = _validated_inputs() | |
| problems, completions, corpus_stats = read_trace_corpus([corpus]) | |
| tokenizer = load_tokenizer(str(source)) | |
| counts = token_frequencies(problems + completions, tokenizer) | |
| priority = token_frequencies(problems, tokenizer) | |
| keep = build_keep_set(counts, tokenizer, 30_000, priority_counts=priority) | |
| loaded, model, replaced, exact_weights, capture_error = dequantize_gptq_model( | |
| source | |
| ) | |
| if capture_error != 0.0: | |
| raise RuntimeError(f"GPTQ code capture error: {capture_error}") | |
| payload, _ = pack_model_state( | |
| model.state_dict(), | |
| keep["keep_ids"], | |
| group_size=128, | |
| exact_entries=exact_weights, | |
| recipe_bits=EXPECTED_BITS, | |
| recipe_name="m3l4a8e8", | |
| ) | |
| payload["source"] = { | |
| "base_model": model_name, | |
| "gptq_source": str(source), | |
| "experiment_config": source_config, | |
| "vocab_corpus": str(corpus), | |
| "vocab_strategy": "problem-first", | |
| "corpus_stats": corpus_stats, | |
| "keep_set": {key: value for key, value in keep.items() if key != "keep_ids"}, | |
| "gptq_linears": replaced, | |
| } | |
| payload["report"]["source_gptq_linears"] = replaced | |
| payload["report"]["gptq_code_capture_error"] = capture_error | |
| payload["report"]["training_token_coverage"] = keep.get("token_coverage") | |
| row_names = [ | |
| name | |
| for name, entry in payload["state_dict"].items() | |
| if entry["kind"] in {"quant_rows", "raw_rows"} | |
| ] | |
| if len(row_names) != 1: | |
| raise RuntimeError(f"expected one canonical tied embedding, found {row_names}") | |
| predictor, predictor_report = fit_token_predictor( | |
| model.state_dict()[row_names[0]].detach().cpu(), | |
| tokenizer, | |
| sample_size=65_536, | |
| device=os.environ.get("EAIMATH_PREDICTOR_DEVICE", "cpu"), | |
| ) | |
| payload["embedding_predictor"] = predictor | |
| payload["report"]["embedding_predictor"] = predictor_report | |
| payload["report"]["tensor_bytes"] += state_dict_bytes( | |
| {"embedding_predictor": predictor["basis"]} | |
| ) | |
| keep_path = Path(output_path).with_suffix(Path(output_path).suffix + ".keep_ids.json") | |
| keep_path.parent.mkdir(parents=True, exist_ok=True) | |
| keep_path.write_text(json.dumps(keep["keep_ids"])) | |
| final = save_artifact(payload, Path(output_path), lossless_codec="zlib", zlib_level=6) | |
| ceiling = int(BY_NAME["B"].high_gb * 1e9) | |
| if int(final["disk_bytes"]) >= ceiling: | |
| raise RuntimeError( | |
| f"artifact is outside the 20% ceiling: {final['disk_bytes']:,} >= {ceiling:,}" | |
| ) | |
| del model, loaded | |
| if torch.cuda.is_available(): | |
| torch.cuda.empty_cache() | |
| def convert_to_hf_checkpoint( | |
| model_name: str, | |
| checkpoint_path: str, | |
| output_path: str, | |
| ) -> None: | |
| """Restore the self-contained artifact to a full BF16 HF checkpoint.""" | |
| report = restore_artifact( | |
| model_name, | |
| checkpoint_path, | |
| output_path, | |
| embedding_fill="token", | |
| ) | |
| Path(output_path, "submission_report.json").write_text(json.dumps(report, indent=2)) | |