hip-quant 2.2.1__tar.gz → 2.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {hip_quant-2.2.1/hip_quant.egg-info → hip_quant-2.2.2}/PKG-INFO +13 -5
- {hip_quant-2.2.1 → hip_quant-2.2.2}/README.md +12 -4
- {hip_quant-2.2.1 → hip_quant-2.2.2}/__init__.py +1 -1
- hip_quant-2.2.2/codebooks/iq2_s.bin +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2/hip_quant.egg-info}/PKG-INFO +13 -5
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/SOURCES.txt +2 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quantize.cpp +17 -6
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quantize.dll +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quantize_rocm721.dll +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/pyproject.toml +1 -1
- {hip_quant-2.2.1 → hip_quant-2.2.2}/DOCUMENTATION.md +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/LICENSE +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/MANIFEST.in +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/_C.cp312-win_amd64.pyd +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/__main__.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/bench_mxfp8.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/bench_wave_attn_inference.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/build.ps1 +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/build.sh +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/cdna_compat.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/codebooks/iq1_s.bin +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/codebooks/iq2_xs.bin +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/codebooks/iq2_xxs.bin +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/codebooks/iq3_s.bin +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/codebooks/iq3_xxs.bin +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/demo.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/device_info.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/diagnose_fp8_crash.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/e2e_iq2s_iq1m.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/get_hf_tensors.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/gguf.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/gguf_loader.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_iquant_util.h +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/dependency_links.txt +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/entry_points.txt +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/not-zip-safe +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/requires.txt +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/top_level.txt +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant_types.h +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant_util.h +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/__init__.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/__main__.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/analyzer.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/api.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/archive.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/backends.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/format.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/hq3.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/hq8.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/mixed_policy.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/raw.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/safetensors_numpy.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/sensitivity.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/torch_inference.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/transformers_loader.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/dequant_to_fp8.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/direct_fp8_quant.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/fp8_expand.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/fp8_gemm_test.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_aq2.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_bf16.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_f8_e4m3.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_f8_e5m2.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_hq2.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq1_m.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq1_s.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq2_s.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq2_xs.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq2_xxs.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq3_s.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq3_xxs.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq4_nl.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq4_xs.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q1_0.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q2_0.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q2_K.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q3_K.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q4_0.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q4_1.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q4_K.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q5_0.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q5_1.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q5_K.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q6_K.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q8_0.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q8_1.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q8_K.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_tq1_0.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_tq2_0.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/wmma_diag.cu +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/setup.cfg +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/setup.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/setup_torch.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/smi.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/__init__.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/bench_attn_compare.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/bench_iq2s_variants.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/bench_wave_prefill.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/debug_conv1d.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_aq2.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_bf16_numpy.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_compat.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_dequant_fp8.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_direct_fp8_quant.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_ffn_layer.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_fused_ssm_prefill.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_gemv_kquants.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_hq2.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_hq2_portable.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_hq8_g128.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_iq2s_iq1m_byte_exact.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_iquant_parallel.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_lazy_torch_import.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_mixed_policy.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_mixed_sensitivity.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_mxfp4_compat.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_mxfp4_native_contract.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_mxfp8_numerical.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_patch_hq_mixed_archive.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_pipeline.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_prefill_with_lse.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_q_to_fp8_gpu.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_qol.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_safetensors_numpy.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_v8.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_wave_attn_decode_hybrid.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_wave_prefill_gqa.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_wmma_diag.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_wmma_layout.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/bench_compare.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/bench_fp8.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/conftest.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_fp8.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_fp8_v2.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_hip_graph.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_mxfp4_native_contract_torch.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_mxfp4_to_fp8_torch.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_mxfp8_torch.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_q_to_fp8_torch.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_quant_transpose.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_wave_attn_backward_math.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/verify_fused_fp8_linear.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/.gpu-smi-version +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/fetch_gpu_smi.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/gpu-smi.exe +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/analyze.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/clean_wikitext.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/collect_hessians.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/hq2_bridge.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/hq2v.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/ldlq.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/ledger.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/run_ladder.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/safe_run.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/validate_hessians.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_api.py +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/current_stream.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/dequant_q_to_fp16.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/fp8_linear_kernels.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/fp8_linear_kernels_v2.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/fp8_quant_kernels.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/gemv_q_kernels.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/hq2_linear_kernels.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/hq3_linear_kernels.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/hq8_g128_linear_kernels.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/iq_grid_tables.h +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/kv_iu4_kernels.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/mxfp4_to_fp8_kernels.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/mxfp8_kernels.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/pytorch_bindings.cpp +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/pytorch_bindings_hip.cpp +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/q_to_fp8_kernels.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/ssm_kernels.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_backward.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_common.h +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_decode.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_diag.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_long.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_prefill.hip +0 -0
- {hip_quant-2.2.1 → hip_quant-2.2.2}/wave_helpers.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hip-quant
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: High-performance GPU tensor quantization and inference engine for AMD ROCm. Native AOT GEMV (K-Quants & I-Quants), State Space Model (SSM/DeltaNet) kernels, FP8 WMMA WaveAttention, and portable HIP C++ kernels for RDNA4, RDNA3, and CDNA.
|
|
5
5
|
Author-email: Thenukegun10x <conormorris84@gmail.com>
|
|
6
6
|
License: Apache License
|
|
@@ -239,6 +239,14 @@ Dynamic: license-file
|
|
|
239
239
|
|
|
240
240
|
`hip-quant` is a standalone Python library and highly optimized HIP C++ backend for tensor quantization and accelerated LLM inference on AMD GPUs with zero CPU round-trips.
|
|
241
241
|
|
|
242
|
+
## 🌟 What's New in 2.2.2
|
|
243
|
+
|
|
244
|
+
> **2.2.2.post215** is the same release rebuilt against PyTorch 2.15 (TheRock / ROCm 7.14).
|
|
245
|
+
|
|
246
|
+
- **Fixed a packaging bug that silently disabled the gfx12 FP8 WMMA path.** `codebooks/iq2_s.bin` was matched by `.gitignore` and never tracked, so it was missing from git, the sdist, and every wheel built from a clean tree. `ensure_initialized()` requires all six I-Quant codebooks and returned failure, which made `get_arch_name`/`get_device_name`/`get_selected_device` report empty — and the `gfx12` gate then failed closed. The codebook is now tracked and shipped, and `codebooks/` is no longer ignored.
|
|
247
|
+
- **Device detection is decoupled from codebook loading.** `get_device_name`, `get_arch_name`, `get_selected_device`, `get_device_memory` and `device_has_wmma` now only require the device to initialise, so a missing or corrupt codebook fails the I-Quant formats loudly instead of bricking GPU detection for every format.
|
|
248
|
+
- The `_C` extension is unchanged from 2.2.1; the Windows `hip_quantize*.dll` were rebuilt with the init split (both all-arch targets).
|
|
249
|
+
|
|
242
250
|
## 🌟 What's New in 2.2.1
|
|
243
251
|
|
|
244
252
|
> **2.2.1.post215** is the same release rebuilt against PyTorch 2.15 (TheRock / ROCm 7.14). See *Custom PyTorch 2.15* below for a self-hosted install index.
|
|
@@ -574,11 +582,11 @@ matches your PyTorch, so the extension loads without an ABI mismatch:
|
|
|
574
582
|
|
|
575
583
|
| Wheel | PyTorch | ROCm |
|
|
576
584
|
|---|---|---|
|
|
577
|
-
| `hip-quant==2.2.
|
|
578
|
-
| `hip-quant==2.2.
|
|
585
|
+
| `hip-quant==2.2.2` | 2.9.x | ROCm 7.2.1 |
|
|
586
|
+
| `hip-quant==2.2.2.post215` | 2.15 / TheRock | ROCm 7.14 |
|
|
579
587
|
|
|
580
588
|
```powershell
|
|
581
|
-
pip install "hip-quant==2.2.
|
|
589
|
+
pip install "hip-quant==2.2.2.post215" # PyTorch 2.15 / TheRock
|
|
582
590
|
```
|
|
583
591
|
|
|
584
592
|
#### Custom PyTorch 2.15 (self-hosted wheels)
|
|
@@ -588,7 +596,7 @@ Its wheels live in a public Backblaze B2 bucket; point pip at the index page
|
|
|
588
596
|
with `--find-links`:
|
|
589
597
|
|
|
590
598
|
```powershell
|
|
591
|
-
pip install "hip-quant==2.2.
|
|
599
|
+
pip install "hip-quant==2.2.2.post215" `
|
|
592
600
|
--find-links https://dl.hipquant.download/file/Torchs/torch_index.html
|
|
593
601
|
```
|
|
594
602
|
|
|
@@ -14,6 +14,14 @@
|
|
|
14
14
|
|
|
15
15
|
`hip-quant` is a standalone Python library and highly optimized HIP C++ backend for tensor quantization and accelerated LLM inference on AMD GPUs with zero CPU round-trips.
|
|
16
16
|
|
|
17
|
+
## 🌟 What's New in 2.2.2
|
|
18
|
+
|
|
19
|
+
> **2.2.2.post215** is the same release rebuilt against PyTorch 2.15 (TheRock / ROCm 7.14).
|
|
20
|
+
|
|
21
|
+
- **Fixed a packaging bug that silently disabled the gfx12 FP8 WMMA path.** `codebooks/iq2_s.bin` was matched by `.gitignore` and never tracked, so it was missing from git, the sdist, and every wheel built from a clean tree. `ensure_initialized()` requires all six I-Quant codebooks and returned failure, which made `get_arch_name`/`get_device_name`/`get_selected_device` report empty — and the `gfx12` gate then failed closed. The codebook is now tracked and shipped, and `codebooks/` is no longer ignored.
|
|
22
|
+
- **Device detection is decoupled from codebook loading.** `get_device_name`, `get_arch_name`, `get_selected_device`, `get_device_memory` and `device_has_wmma` now only require the device to initialise, so a missing or corrupt codebook fails the I-Quant formats loudly instead of bricking GPU detection for every format.
|
|
23
|
+
- The `_C` extension is unchanged from 2.2.1; the Windows `hip_quantize*.dll` were rebuilt with the init split (both all-arch targets).
|
|
24
|
+
|
|
17
25
|
## 🌟 What's New in 2.2.1
|
|
18
26
|
|
|
19
27
|
> **2.2.1.post215** is the same release rebuilt against PyTorch 2.15 (TheRock / ROCm 7.14). See *Custom PyTorch 2.15* below for a self-hosted install index.
|
|
@@ -349,11 +357,11 @@ matches your PyTorch, so the extension loads without an ABI mismatch:
|
|
|
349
357
|
|
|
350
358
|
| Wheel | PyTorch | ROCm |
|
|
351
359
|
|---|---|---|
|
|
352
|
-
| `hip-quant==2.2.
|
|
353
|
-
| `hip-quant==2.2.
|
|
360
|
+
| `hip-quant==2.2.2` | 2.9.x | ROCm 7.2.1 |
|
|
361
|
+
| `hip-quant==2.2.2.post215` | 2.15 / TheRock | ROCm 7.14 |
|
|
354
362
|
|
|
355
363
|
```powershell
|
|
356
|
-
pip install "hip-quant==2.2.
|
|
364
|
+
pip install "hip-quant==2.2.2.post215" # PyTorch 2.15 / TheRock
|
|
357
365
|
```
|
|
358
366
|
|
|
359
367
|
#### Custom PyTorch 2.15 (self-hosted wheels)
|
|
@@ -363,7 +371,7 @@ Its wheels live in a public Backblaze B2 bucket; point pip at the index page
|
|
|
363
371
|
with `--find-links`:
|
|
364
372
|
|
|
365
373
|
```powershell
|
|
366
|
-
pip install "hip-quant==2.2.
|
|
374
|
+
pip install "hip-quant==2.2.2.post215" `
|
|
367
375
|
--find-links https://dl.hipquant.download/file/Torchs/torch_index.html
|
|
368
376
|
```
|
|
369
377
|
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hip-quant
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: High-performance GPU tensor quantization and inference engine for AMD ROCm. Native AOT GEMV (K-Quants & I-Quants), State Space Model (SSM/DeltaNet) kernels, FP8 WMMA WaveAttention, and portable HIP C++ kernels for RDNA4, RDNA3, and CDNA.
|
|
5
5
|
Author-email: Thenukegun10x <conormorris84@gmail.com>
|
|
6
6
|
License: Apache License
|
|
@@ -239,6 +239,14 @@ Dynamic: license-file
|
|
|
239
239
|
|
|
240
240
|
`hip-quant` is a standalone Python library and highly optimized HIP C++ backend for tensor quantization and accelerated LLM inference on AMD GPUs with zero CPU round-trips.
|
|
241
241
|
|
|
242
|
+
## 🌟 What's New in 2.2.2
|
|
243
|
+
|
|
244
|
+
> **2.2.2.post215** is the same release rebuilt against PyTorch 2.15 (TheRock / ROCm 7.14).
|
|
245
|
+
|
|
246
|
+
- **Fixed a packaging bug that silently disabled the gfx12 FP8 WMMA path.** `codebooks/iq2_s.bin` was matched by `.gitignore` and never tracked, so it was missing from git, the sdist, and every wheel built from a clean tree. `ensure_initialized()` requires all six I-Quant codebooks and returned failure, which made `get_arch_name`/`get_device_name`/`get_selected_device` report empty — and the `gfx12` gate then failed closed. The codebook is now tracked and shipped, and `codebooks/` is no longer ignored.
|
|
247
|
+
- **Device detection is decoupled from codebook loading.** `get_device_name`, `get_arch_name`, `get_selected_device`, `get_device_memory` and `device_has_wmma` now only require the device to initialise, so a missing or corrupt codebook fails the I-Quant formats loudly instead of bricking GPU detection for every format.
|
|
248
|
+
- The `_C` extension is unchanged from 2.2.1; the Windows `hip_quantize*.dll` were rebuilt with the init split (both all-arch targets).
|
|
249
|
+
|
|
242
250
|
## 🌟 What's New in 2.2.1
|
|
243
251
|
|
|
244
252
|
> **2.2.1.post215** is the same release rebuilt against PyTorch 2.15 (TheRock / ROCm 7.14). See *Custom PyTorch 2.15* below for a self-hosted install index.
|
|
@@ -574,11 +582,11 @@ matches your PyTorch, so the extension loads without an ABI mismatch:
|
|
|
574
582
|
|
|
575
583
|
| Wheel | PyTorch | ROCm |
|
|
576
584
|
|---|---|---|
|
|
577
|
-
| `hip-quant==2.2.
|
|
578
|
-
| `hip-quant==2.2.
|
|
585
|
+
| `hip-quant==2.2.2` | 2.9.x | ROCm 7.2.1 |
|
|
586
|
+
| `hip-quant==2.2.2.post215` | 2.15 / TheRock | ROCm 7.14 |
|
|
579
587
|
|
|
580
588
|
```powershell
|
|
581
|
-
pip install "hip-quant==2.2.
|
|
589
|
+
pip install "hip-quant==2.2.2.post215" # PyTorch 2.15 / TheRock
|
|
582
590
|
```
|
|
583
591
|
|
|
584
592
|
#### Custom PyTorch 2.15 (self-hosted wheels)
|
|
@@ -588,7 +596,7 @@ Its wheels live in a public Backblaze B2 bucket; point pip at the index page
|
|
|
588
596
|
with `--find-links`:
|
|
589
597
|
|
|
590
598
|
```powershell
|
|
591
|
-
pip install "hip-quant==2.2.
|
|
599
|
+
pip install "hip-quant==2.2.2.post215" `
|
|
592
600
|
--find-links https://dl.hipquant.download/file/Torchs/torch_index.html
|
|
593
601
|
```
|
|
594
602
|
|
|
@@ -56,6 +56,7 @@ wave_helpers.py
|
|
|
56
56
|
./torch_api.py
|
|
57
57
|
./wave_helpers.py
|
|
58
58
|
./codebooks/iq1_s.bin
|
|
59
|
+
./codebooks/iq2_s.bin
|
|
59
60
|
./codebooks/iq2_xs.bin
|
|
60
61
|
./codebooks/iq2_xxs.bin
|
|
61
62
|
./codebooks/iq3_s.bin
|
|
@@ -171,6 +172,7 @@ wave_helpers.py
|
|
|
171
172
|
./torch_ext/wave_attn_long.hip
|
|
172
173
|
./torch_ext/wave_attn_prefill.hip
|
|
173
174
|
codebooks/iq1_s.bin
|
|
175
|
+
codebooks/iq2_s.bin
|
|
174
176
|
codebooks/iq2_xs.bin
|
|
175
177
|
codebooks/iq2_xxs.bin
|
|
176
178
|
codebooks/iq3_s.bin
|
|
@@ -259,7 +259,10 @@ static bool load_iq_host_codebook(
|
|
|
259
259
|
return true;
|
|
260
260
|
}
|
|
261
261
|
|
|
262
|
-
|
|
262
|
+
// Device-only init: enumerate, select, and cache device properties. Kept
|
|
263
|
+
// separate from I-Quant codebook loading so a missing codebook cannot brick
|
|
264
|
+
// device detection (arch/name/selected_device) for every other format.
|
|
265
|
+
static bool ensure_device() {
|
|
263
266
|
if (!hip_initialized) {
|
|
264
267
|
int count = 0;
|
|
265
268
|
if (!hip_check(hipGetDeviceCount(&count), "hipGetDeviceCount")) return false;
|
|
@@ -297,6 +300,14 @@ static bool ensure_initialized() {
|
|
|
297
300
|
if (!hip_check(hipGetDeviceProperties(&props, device_id), "hipGetDeviceProperties")) return false;
|
|
298
301
|
hip_initialized = true;
|
|
299
302
|
}
|
|
303
|
+
return true;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// Full init: device + all I-Quant codebooks. Used by the format entry points
|
|
307
|
+
// that may need a codebook, so a missing file fails those calls loudly instead
|
|
308
|
+
// of letting kernels read un-uploaded device tables and return wrong results.
|
|
309
|
+
static bool ensure_initialized() {
|
|
310
|
+
if (!ensure_device()) return false;
|
|
300
311
|
if (!iq3xxs_tables_loaded) {
|
|
301
312
|
iq_host_codebook table = {};
|
|
302
313
|
if (!load_iq_host_codebook("iq3_xxs", 256 * 4, 4096 * sizeof(int), 22825 * sizeof(uint16_t), &table)) return false;
|
|
@@ -544,7 +555,7 @@ HIP_QUANT_EXPORT size_t ggml_row_size_for(int type, int64_t n_per_row) {
|
|
|
544
555
|
|
|
545
556
|
HIP_QUANT_EXPORT const char* get_device_name() {
|
|
546
557
|
static thread_local char name[256];
|
|
547
|
-
if (!
|
|
558
|
+
if (!ensure_device()) return "";
|
|
548
559
|
strncpy(name, props.name, 255);
|
|
549
560
|
name[255] = '\0';
|
|
550
561
|
return name;
|
|
@@ -1839,7 +1850,7 @@ HIP_QUANT_EXPORT int get_device_prop(
|
|
|
1839
1850
|
}
|
|
1840
1851
|
|
|
1841
1852
|
HIP_QUANT_EXPORT int get_arch_name(char *buf, int buf_size) {
|
|
1842
|
-
if (!
|
|
1853
|
+
if (!ensure_device()) return 1;
|
|
1843
1854
|
strncpy(buf, props.gcnArchName, (size_t)(buf_size - 1));
|
|
1844
1855
|
buf[buf_size - 1] = '\0';
|
|
1845
1856
|
return 0;
|
|
@@ -1849,7 +1860,7 @@ HIP_QUANT_EXPORT int get_arch_name(char *buf, int buf_size) {
|
|
|
1849
1860
|
// index is relative to HIP_VISIBLE_DEVICES when that environment variable is
|
|
1850
1861
|
// set before the process starts.
|
|
1851
1862
|
HIP_QUANT_EXPORT int get_selected_device() {
|
|
1852
|
-
return
|
|
1863
|
+
return ensure_device() ? device_id : -1;
|
|
1853
1864
|
}
|
|
1854
1865
|
|
|
1855
1866
|
HIP_QUANT_EXPORT int get_hip_runtime_version() {
|
|
@@ -1859,7 +1870,7 @@ HIP_QUANT_EXPORT int get_hip_runtime_version() {
|
|
|
1859
1870
|
}
|
|
1860
1871
|
|
|
1861
1872
|
HIP_QUANT_EXPORT int get_device_memory(size_t *free_bytes, size_t *total_bytes) {
|
|
1862
|
-
if (!
|
|
1873
|
+
if (!ensure_device()) {
|
|
1863
1874
|
*free_bytes = 0;
|
|
1864
1875
|
*total_bytes = 0;
|
|
1865
1876
|
return 1;
|
|
@@ -1874,7 +1885,7 @@ HIP_QUANT_EXPORT int get_device_memory(size_t *free_bytes, size_t *total_bytes)
|
|
|
1874
1885
|
}
|
|
1875
1886
|
|
|
1876
1887
|
HIP_QUANT_EXPORT int device_has_wmma() {
|
|
1877
|
-
if (!
|
|
1888
|
+
if (!ensure_device()) return 0;
|
|
1878
1889
|
const char *arch = props.gcnArchName;
|
|
1879
1890
|
// This reports support for the FP8/BF8 gfx12 w32 intrinsics used by
|
|
1880
1891
|
// fp8_gemm_wmma_kernel, not general matrix-core or rocWMMA capability.
|
|
Binary file
|
|
Binary file
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "hip-quant"
|
|
7
|
-
version = "2.2.
|
|
7
|
+
version = "2.2.2"
|
|
8
8
|
description = "High-performance GPU tensor quantization and inference engine for AMD ROCm. Native AOT GEMV (K-Quants & I-Quants), State Space Model (SSM/DeltaNet) kernels, FP8 WMMA WaveAttention, and portable HIP C++ kernels for RDNA4, RDNA3, and CDNA."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|