npx skills add ...
npx skills add nvidia/compileiq --skill compileiq-search-space
Use when picking the search_space= argument for Search(). Covers the three provider classes (PtxasSearchSpace, NvccSearchSpace, LocalSearchSpaceBin), how to pin a version/variant/tag, the attention-focused 'att' variant for attention kernels (FlashAttention, GQA, MHA, MLA, FlashInfer Batch Decode), air-gapped mirroring via CIQ_SEARCH_SPACES_DIR, and custom user-defined search spaces built from compileiq.search_spaces.base primitives. Triggers on "search space", "PtxasSearchSpace", "NvccSearchSpace", "air-gapped compileiq", "offline compileiq", "CIQ_SEARCH_SPACES_DIR", "attention variant", "ptxas att".
npx skills add nvidia/compileiq --skill compileiq-search-space
CompileIQ ships compiler search spaces as release-backed binary blobs that
the providers in compileiq.search_spaces.compilers fetch on demand. This
skill covers the three provider classes, the variants they expose today,
how to use them offline, and how to define a custom search space for
non-compiler tuning.
.bin you have on hand.Reference: compileiq/search_spaces/compilers.py:66-102.
From release/search-spaces/manifest-source.yaml:
| Compiler | Version | Variant | File | When to use |
|---|---|---|---|---|
ptxas | 13.3 | default | ptxas13.3_search_space.bin | Generic PTXAS tuning; the right starting point for most kernels. |
ptxas | 13.3 | att | ptxas13.3_att_search_space.bin | Attention workloads. att is short for attention, not "attribute". This variant is curated for FlashAttention, GQA, MHA, MLA, FlashInfer Batch Decode, and similar attention kernels. Prefer this whenever the kernel is attention-shaped. |
nvcc | 13.3 | default | nvcc13.3_search_space.bin | Full-compiler (front-end + back-end) tuning when you want NVCC-level knobs, not just PTXAS. |
To enumerate variants in the latest release at any time:
Pre-download the manifest plus all .bin files on a connected host, then point
CompileIQ at the local mirror via CIQ_SEARCH_SPACES_DIR:
Other env-var knobs:
CIQ_SEARCH_SPACES_REPO (default NVIDIA/CompileIQ): override the GitHub
repo the resolver queries — useful for staging or forks.CIQ_SS_TAG_PREFIX (default search-spaces-): tag prefix used when
resolving tag="latest". Rarely needs changing.Resolved binaries are cached at ~/.cache/compileiq/<tag>/<sha256_prefix>_<filename>.
The resolver verifies cached files by sha256; a corrupted entry is re-downloaded
on the next call. Safe to wipe — wiping just costs one re-download.
For hyperparameter tuning, autotuner knobs, or any user-defined space, pass
a dict (or list-of-dicts) directly instead of a provider. Primitives live in
compileiq/search_spaces/base.py:
| Primitive | Purpose |
|---|---|
choice([...]) | Sample uniformly from a discrete list. |
range(start, end, step) | Range-like sampling (also supports float steps). |
literal(value, knockout_prob=...) | Constant value; knockout_prob lets the GA disable this parameter. |
log_sampling(start, end, total) | Logarithmic distribution between start and end with total discrete buckets. |
Mixed user + compiler search space (list shape):
When the search space is a list, the objective receives a list of the same
length — see compileiq-author-objective for the unpacking pattern.
att is attention, not "attribute". Earlier docs and a test fixture
mislabeled the variant as "attribute-based register allocation" — corrected
in this same branch. When recommending the variant to a user, say
"attention" explicitly..acf candidates to apply outside a search. Don't
feed a .acf from a Booster Pack to PtxasSearchSpace(...).LocalSearchSpaceBin doesn't validate .bin contents. It only
validates that the file exists. A malformed file will fail downstream when
the core tries to parse it; the resulting error message points at the
resolver, not the provider.compileiq-author-objective.compileiq-run-search.gh release view --json assets --jq '.assets[].name' -R NVIDIA/CompileIQ <tag># On a connected host
mkdir -p /shared/ciq-search-spaces
gh release download search-spaces-latest -R NVIDIA/CompileIQ -D /shared/ciq-search-spaces
# Move the directory to the air-gapped host (rsync, scp, sneaker-net, …)
# On the air-gapped host
export CIQ_SEARCH_SPACES_DIR=/shared/ciq-search-spaces
python -c "from compileiq.search_spaces.compilers import PtxasSearchSpace; print(PtxasSearchSpace().retrieve())"import compileiq.search_spaces.base as ss
search_space = {
"block_size": ss.choice([64, 128, 256, 512]),
"unroll": ss.range(start=1, end=8, step=1),
"use_shmem": ss.literal(True, knockout_prob=0.5),
"lr": ss.log_sampling(start=1e-5, end=1e-1, total=20),
}search_space = [
{"config_idx": ss.range(0, len(CONFIGS) - 1)}, # user-defined
PtxasSearchSpace(version="13.3"), # compiler-side
]# Default variant resolves
python -c "
from compileiq.search_spaces.compilers import PtxasSearchSpace
p = PtxasSearchSpace().retrieve()
assert p.exists() and p.stat().st_size > 0, p
print(f'default OK: {p}')
"
# Attention variant resolves
python -c "
from compileiq.search_spaces.compilers import PtxasSearchSpace
p = PtxasSearchSpace(version='13.3', variant='att').retrieve()
assert p.exists() and p.stat().st_size > 0, p
print(f'att OK: {p}')
"
# Misconfigured air-gap mirror produces a clear error
CIQ_SEARCH_SPACES_DIR=/nonexistent python -c "
from compileiq.search_spaces.compilers import PtxasSearchSpace
try:
PtxasSearchSpace().retrieve()
print('UNEXPECTED: should have failed')
except Exception as e:
print(f'expected failure: {type(e).__name__}')
"