mirror of
https://github.com/NVIDIA/Model-Optimizer.git
synced 2026-11-02 08:03:22 +08:00
## What does this PR do? **Type of change:** refactor / deprecation (examples) Follow-up to #1705 (which consolidated `examples/vlm_ptq` into `examples/llm_ptq`). Since that example now covers Hugging Face **LLM and VLM** PTQ, the `llm_ptq` name is a misnomer. This renames the directory to `examples/hf_ptq` and leaves a relative symlink `examples/llm_ptq → hf_ptq` so existing paths/commands keep working during a deprecation window. Requested by @kevalmorabia97 on #1705 (with the symlink-for-back-compat approach), targeted for the **same 0.46 release** as the consolidation. ### Changes - `git mv examples/llm_ptq → examples/hf_ptq` and `tests/examples/llm_ptq → tests/examples/hf_ptq` (the CI runner maps the matrix name to both `examples/<name>` and `tests/examples/<name>`). - Add a tracked back-compat symlink `examples/llm_ptq → hf_ptq`. - Update CI matrices and all repo **path references** (docs, READMEs, agent skills, launcher/debugger tools, tests) from `llm_ptq` to `hf_ptq`. - Keep Python identifiers / test-util module names (`run_llm_ptq_command`, `llm_ptq_utils`) — they name the LLM-PTQ task, not the directory. - Preserve the CODEOWNERS team slug (`modelopt-examples-llm_ptq-codeowners`) and historical CHANGELOG entries; add a CHANGELOG deprecation note. ### Back-compat caveats (inherent to git directory symlinks) - ✅ Linux/macOS CLI usage and Python `cwd`/pytest resolution work through the symlink. - ⚠️ Windows git checkouts don't materialize symlinks by default (low impact — this example is Linux-only in practice). - ⚠️ GitHub web doesn't follow directory symlinks, so legacy external deep-links to `examples/llm_ptq/...` won't navigate in. All **internal** references are repointed to `hf_ptq`, so the symlink is only for legacy external/CLI use. ### Usage (unchanged via symlink) ```bash # New canonical path cd examples/hf_ptq scripts/huggingface_example.sh --model <hf_model> --quant fp8 # Old path still works (forwards via symlink) cd examples/llm_ptq && scripts/huggingface_example.sh --model <hf_model> --quant fp8 ``` ### Testing - `bash -n` on moved/edited shell scripts (new path + via symlink). - `py_compile` on moved/edited Python; test re-export shim repointed to `examples/hf_ptq/example_utils`. - Verified git tracks `examples/llm_ptq` as a single symlink (mode 120000), not a duplicated tree (no pre-commit / pytest double-processing). - `pre-commit run` on all changed files passes. ### Before your PR is "*Ready for review*" - Is this change backward compatible?: ✅ (relative symlink keeps `examples/llm_ptq` paths valid; see caveats above) - Did you write any new necessary tests?: N/A (pure rename; existing tests moved with the dir) - Did you update Changelog?: ✅ ### Additional Information Follow-up (later release): remove the `examples/llm_ptq` symlink once external references have migrated. 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * PTQ guidance now directs to the unified Hugging Face PTQ flow, including VLM quantization via the shared `--vlm` entry point. * **Documentation** * Updated README and guide links, references, and command snippets to use `hf_ptq` (replacing `llm_ptq`). * Deprecated and consolidated `vlm_ptq` into `hf_ptq`; removed VILA/NVILA coverage from the Hugging Face PTQ examples. * **Bug Fixes** * Improved detection and routing so local/manual setup uses the correct PTQ source. * **Tests / Chores** * CI and example tests updated to run the `hf_ptq` variants. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Zhiyu Cheng <zhiyuc@nvidia.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
83 lines
3.4 KiB
YAML
83 lines
3.4 KiB
YAML
# Reusable workflow for running example tests
|
|
name: Example Tests Runner
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
docker_image:
|
|
description: "Docker image to use for tests"
|
|
required: true
|
|
type: string
|
|
example:
|
|
description: "Example name to test (e.g. 'hf_ptq')"
|
|
required: true
|
|
type: string
|
|
timeout_minutes:
|
|
description: "Timeout in minutes for the job"
|
|
required: false
|
|
type: number
|
|
default: 60
|
|
pip_install_extras:
|
|
description: "Pip install extras (e.g. '[hf,dev-test]' or '[all,dev-test]')"
|
|
required: false
|
|
type: string
|
|
default: "[all,dev-test]"
|
|
runner:
|
|
description: "GitHub runner to use"
|
|
required: false
|
|
type: string
|
|
default: "linux-amd64-gpu-rtxpro6000-latest-1"
|
|
|
|
jobs:
|
|
run-test:
|
|
runs-on: ${{ inputs.runner }}
|
|
timeout-minutes: ${{ inputs.timeout_minutes }}
|
|
container:
|
|
image: ${{ inputs.docker_image }}
|
|
options: --shm-size=2gb # TRT-LLM tests on 2-GPU runner needs more shared memory
|
|
env:
|
|
PIP_CONSTRAINT: "" # Disable pip constraint for upgrading packages
|
|
HF_TOKEN: ${{ secrets.HF_TOKEN }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: nv-gha-runners/setup-proxy-cache@main
|
|
- uses: ./.github/actions/cache-extensions
|
|
with:
|
|
cache-key: rtxpro6000-${{ inputs.docker_image }}
|
|
- name: Setup environment variables
|
|
run: |
|
|
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/include:/usr/lib/x86_64-linux-gnu:/usr/local/tensorrt/targets/x86_64-linux-gnu/lib" >> $GITHUB_ENV
|
|
echo "PATH=${PATH}:/usr/local/tensorrt/targets/x86_64-linux-gnu/bin" >> $GITHUB_ENV
|
|
- name: Install dependencies
|
|
run: |
|
|
# Uninstall conflicting system-wide installed modelopt in nemo containers
|
|
pip uninstall -y nvidia-modelopt || true
|
|
|
|
# Use `python -m pip` instead of `pip` to avoid conflicts with system pip for nemo containers
|
|
# Editable install so example scripts launched as subprocesses resolve modelopt to the same source path as the test process
|
|
python -m pip install -e ".${{ inputs.pip_install_extras }}"
|
|
|
|
if [[ "${{ inputs.example }}" == *"diffusers"* ]]; then
|
|
echo "Uninstalling apex for diffusers: T5 Int8 (PixArt) + Apex is not supported as per https://github.com/huggingface/transformers/issues/21391"
|
|
python -m pip uninstall -y apex || true
|
|
fi
|
|
|
|
find examples/${{ inputs.example }} -name "requirements.txt" | while read req_file; do python -m pip install -r "$req_file" || exit 1; done
|
|
- name: Run tests
|
|
env:
|
|
# Absolute paths so subprocesses running from different working directories
|
|
# all find the config and write .coverage.* files to the same location.
|
|
COVERAGE_PROCESS_START: ${{ github.workspace }}/pyproject.toml
|
|
COVERAGE_FILE: ${{ github.workspace }}/.coverage
|
|
run: |
|
|
echo "Running tests for: ${{ inputs.example }}"
|
|
python -m pytest tests/examples/${{ inputs.example }} --cov
|
|
- name: Upload coverage to Codecov
|
|
uses: codecov/codecov-action@v5
|
|
with:
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
files: coverage.xml
|
|
flags: examples
|
|
fail_ci_if_error: false # test may be skipped if relevant file changes are not detected
|
|
verbose: true
|