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.
Files changed (181) hide show
  1. {hip_quant-2.2.1/hip_quant.egg-info → hip_quant-2.2.2}/PKG-INFO +13 -5
  2. {hip_quant-2.2.1 → hip_quant-2.2.2}/README.md +12 -4
  3. {hip_quant-2.2.1 → hip_quant-2.2.2}/__init__.py +1 -1
  4. hip_quant-2.2.2/codebooks/iq2_s.bin +0 -0
  5. {hip_quant-2.2.1 → hip_quant-2.2.2/hip_quant.egg-info}/PKG-INFO +13 -5
  6. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/SOURCES.txt +2 -0
  7. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quantize.cpp +17 -6
  8. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quantize.dll +0 -0
  9. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quantize_rocm721.dll +0 -0
  10. {hip_quant-2.2.1 → hip_quant-2.2.2}/pyproject.toml +1 -1
  11. {hip_quant-2.2.1 → hip_quant-2.2.2}/DOCUMENTATION.md +0 -0
  12. {hip_quant-2.2.1 → hip_quant-2.2.2}/LICENSE +0 -0
  13. {hip_quant-2.2.1 → hip_quant-2.2.2}/MANIFEST.in +0 -0
  14. {hip_quant-2.2.1 → hip_quant-2.2.2}/_C.cp312-win_amd64.pyd +0 -0
  15. {hip_quant-2.2.1 → hip_quant-2.2.2}/__main__.py +0 -0
  16. {hip_quant-2.2.1 → hip_quant-2.2.2}/bench_mxfp8.py +0 -0
  17. {hip_quant-2.2.1 → hip_quant-2.2.2}/bench_wave_attn_inference.py +0 -0
  18. {hip_quant-2.2.1 → hip_quant-2.2.2}/build.ps1 +0 -0
  19. {hip_quant-2.2.1 → hip_quant-2.2.2}/build.sh +0 -0
  20. {hip_quant-2.2.1 → hip_quant-2.2.2}/cdna_compat.py +0 -0
  21. {hip_quant-2.2.1 → hip_quant-2.2.2}/codebooks/iq1_s.bin +0 -0
  22. {hip_quant-2.2.1 → hip_quant-2.2.2}/codebooks/iq2_xs.bin +0 -0
  23. {hip_quant-2.2.1 → hip_quant-2.2.2}/codebooks/iq2_xxs.bin +0 -0
  24. {hip_quant-2.2.1 → hip_quant-2.2.2}/codebooks/iq3_s.bin +0 -0
  25. {hip_quant-2.2.1 → hip_quant-2.2.2}/codebooks/iq3_xxs.bin +0 -0
  26. {hip_quant-2.2.1 → hip_quant-2.2.2}/demo.py +0 -0
  27. {hip_quant-2.2.1 → hip_quant-2.2.2}/device_info.py +0 -0
  28. {hip_quant-2.2.1 → hip_quant-2.2.2}/diagnose_fp8_crash.py +0 -0
  29. {hip_quant-2.2.1 → hip_quant-2.2.2}/e2e_iq2s_iq1m.py +0 -0
  30. {hip_quant-2.2.1 → hip_quant-2.2.2}/get_hf_tensors.py +0 -0
  31. {hip_quant-2.2.1 → hip_quant-2.2.2}/gguf.py +0 -0
  32. {hip_quant-2.2.1 → hip_quant-2.2.2}/gguf_loader.py +0 -0
  33. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_iquant_util.h +0 -0
  34. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/dependency_links.txt +0 -0
  35. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/entry_points.txt +0 -0
  36. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/not-zip-safe +0 -0
  37. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/requires.txt +0 -0
  38. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant.egg-info/top_level.txt +0 -0
  39. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant_types.h +0 -0
  40. {hip_quant-2.2.1 → hip_quant-2.2.2}/hip_quant_util.h +0 -0
  41. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/__init__.py +0 -0
  42. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/__main__.py +0 -0
  43. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/analyzer.py +0 -0
  44. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/api.py +0 -0
  45. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/archive.py +0 -0
  46. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/backends.py +0 -0
  47. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/format.py +0 -0
  48. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/hq3.py +0 -0
  49. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/hq8.py +0 -0
  50. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/mixed_policy.py +0 -0
  51. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/raw.py +0 -0
  52. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/safetensors_numpy.py +0 -0
  53. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/sensitivity.py +0 -0
  54. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/torch_inference.py +0 -0
  55. {hip_quant-2.2.1 → hip_quant-2.2.2}/hq2/transformers_loader.py +0 -0
  56. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/dequant_to_fp8.cu +0 -0
  57. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/direct_fp8_quant.cu +0 -0
  58. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/fp8_expand.cu +0 -0
  59. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/fp8_gemm_test.cu +0 -0
  60. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_aq2.cu +0 -0
  61. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_bf16.cu +0 -0
  62. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_f8_e4m3.cu +0 -0
  63. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_f8_e5m2.cu +0 -0
  64. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_hq2.cu +0 -0
  65. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq1_m.cu +0 -0
  66. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq1_s.cu +0 -0
  67. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq2_s.cu +0 -0
  68. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq2_xs.cu +0 -0
  69. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq2_xxs.cu +0 -0
  70. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq3_s.cu +0 -0
  71. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq3_xxs.cu +0 -0
  72. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq4_nl.cu +0 -0
  73. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_iq4_xs.cu +0 -0
  74. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q1_0.cu +0 -0
  75. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q2_0.cu +0 -0
  76. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q2_K.cu +0 -0
  77. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q3_K.cu +0 -0
  78. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q4_0.cu +0 -0
  79. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q4_1.cu +0 -0
  80. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q4_K.cu +0 -0
  81. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q5_0.cu +0 -0
  82. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q5_1.cu +0 -0
  83. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q5_K.cu +0 -0
  84. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q6_K.cu +0 -0
  85. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q8_0.cu +0 -0
  86. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q8_1.cu +0 -0
  87. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_q8_K.cu +0 -0
  88. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_tq1_0.cu +0 -0
  89. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/quant_tq2_0.cu +0 -0
  90. {hip_quant-2.2.1 → hip_quant-2.2.2}/kernels/wmma_diag.cu +0 -0
  91. {hip_quant-2.2.1 → hip_quant-2.2.2}/setup.cfg +0 -0
  92. {hip_quant-2.2.1 → hip_quant-2.2.2}/setup.py +0 -0
  93. {hip_quant-2.2.1 → hip_quant-2.2.2}/setup_torch.py +0 -0
  94. {hip_quant-2.2.1 → hip_quant-2.2.2}/smi.py +0 -0
  95. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/__init__.py +0 -0
  96. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/bench_attn_compare.py +0 -0
  97. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/bench_iq2s_variants.py +0 -0
  98. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/bench_wave_prefill.py +0 -0
  99. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/debug_conv1d.py +0 -0
  100. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_aq2.py +0 -0
  101. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_bf16_numpy.py +0 -0
  102. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_compat.py +0 -0
  103. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_dequant_fp8.py +0 -0
  104. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_direct_fp8_quant.py +0 -0
  105. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_ffn_layer.py +0 -0
  106. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_fused_ssm_prefill.py +0 -0
  107. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_gemv_kquants.py +0 -0
  108. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_hq2.py +0 -0
  109. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_hq2_portable.py +0 -0
  110. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_hq8_g128.py +0 -0
  111. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_iq2s_iq1m_byte_exact.py +0 -0
  112. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_iquant_parallel.py +0 -0
  113. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_lazy_torch_import.py +0 -0
  114. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_mixed_policy.py +0 -0
  115. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_mixed_sensitivity.py +0 -0
  116. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_mxfp4_compat.py +0 -0
  117. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_mxfp4_native_contract.py +0 -0
  118. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_mxfp8_numerical.py +0 -0
  119. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_patch_hq_mixed_archive.py +0 -0
  120. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_pipeline.py +0 -0
  121. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_prefill_with_lse.py +0 -0
  122. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_q_to_fp8_gpu.py +0 -0
  123. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_qol.py +0 -0
  124. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_safetensors_numpy.py +0 -0
  125. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_v8.py +0 -0
  126. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_wave_attn_decode_hybrid.py +0 -0
  127. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_wave_prefill_gqa.py +0 -0
  128. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_wmma_diag.py +0 -0
  129. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/test_wmma_layout.py +0 -0
  130. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/bench_compare.py +0 -0
  131. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/bench_fp8.py +0 -0
  132. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/conftest.py +0 -0
  133. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_fp8.py +0 -0
  134. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_fp8_v2.py +0 -0
  135. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_hip_graph.py +0 -0
  136. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_mxfp4_native_contract_torch.py +0 -0
  137. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_mxfp4_to_fp8_torch.py +0 -0
  138. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_mxfp8_torch.py +0 -0
  139. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_q_to_fp8_torch.py +0 -0
  140. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_quant_transpose.py +0 -0
  141. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/torch/test_wave_attn_backward_math.py +0 -0
  142. {hip_quant-2.2.1 → hip_quant-2.2.2}/tests/verify_fused_fp8_linear.py +0 -0
  143. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/.gpu-smi-version +0 -0
  144. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/fetch_gpu_smi.py +0 -0
  145. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/gpu-smi.exe +0 -0
  146. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/analyze.py +0 -0
  147. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/clean_wikitext.py +0 -0
  148. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/collect_hessians.py +0 -0
  149. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/hq2_bridge.py +0 -0
  150. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/hq2v.py +0 -0
  151. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/ldlq.py +0 -0
  152. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/ledger.py +0 -0
  153. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/run_ladder.py +0 -0
  154. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/safe_run.py +0 -0
  155. {hip_quant-2.2.1 → hip_quant-2.2.2}/tools/mlp_codec/validate_hessians.py +0 -0
  156. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_api.py +0 -0
  157. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/current_stream.hip +0 -0
  158. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/dequant_q_to_fp16.hip +0 -0
  159. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/fp8_linear_kernels.hip +0 -0
  160. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/fp8_linear_kernels_v2.hip +0 -0
  161. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/fp8_quant_kernels.hip +0 -0
  162. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/gemv_q_kernels.hip +0 -0
  163. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/hq2_linear_kernels.hip +0 -0
  164. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/hq3_linear_kernels.hip +0 -0
  165. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/hq8_g128_linear_kernels.hip +0 -0
  166. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/iq_grid_tables.h +0 -0
  167. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/kv_iu4_kernels.hip +0 -0
  168. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/mxfp4_to_fp8_kernels.hip +0 -0
  169. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/mxfp8_kernels.hip +0 -0
  170. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/pytorch_bindings.cpp +0 -0
  171. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/pytorch_bindings_hip.cpp +0 -0
  172. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/q_to_fp8_kernels.hip +0 -0
  173. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/ssm_kernels.hip +0 -0
  174. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn.hip +0 -0
  175. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_backward.hip +0 -0
  176. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_common.h +0 -0
  177. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_decode.hip +0 -0
  178. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_diag.hip +0 -0
  179. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_long.hip +0 -0
  180. {hip_quant-2.2.1 → hip_quant-2.2.2}/torch_ext/wave_attn_prefill.hip +0 -0
  181. {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.1
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.1` | 2.9.x | ROCm 7.2.1 |
578
- | `hip-quant==2.2.1.post215` | 2.15 / TheRock | ROCm 7.14 |
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.1.post215" # PyTorch 2.15 / TheRock
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.1.post215" `
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.1` | 2.9.x | ROCm 7.2.1 |
353
- | `hip-quant==2.2.1.post215` | 2.15 / TheRock | ROCm 7.14 |
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.1.post215" # PyTorch 2.15 / TheRock
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.1.post215" `
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
 
@@ -3,7 +3,7 @@ import numpy as np
3
3
  import os
4
4
  import sys
5
5
 
6
- __version__ = "2.2.1"
6
+ __version__ = "2.2.2"
7
7
 
8
8
 
9
9
  _TORCH_EXPORTS = {
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hip-quant
3
- Version: 2.2.1
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.1` | 2.9.x | ROCm 7.2.1 |
578
- | `hip-quant==2.2.1.post215` | 2.15 / TheRock | ROCm 7.14 |
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.1.post215" # PyTorch 2.15 / TheRock
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.1.post215" `
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
- static bool ensure_initialized() {
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 (!ensure_initialized()) return "";
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 (!ensure_initialized()) return 1;
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 ensure_initialized() ? device_id : -1;
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 (!ensure_initialized()) {
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 (!ensure_initialized()) return 0;
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.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "hip-quant"
7
- version = "2.2.1"
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