- Install the system and Qualcomm driver packages, then the
geniexCLI. - Pull the Gemma 4 E4B bundle from AI Hub.
- Run text, image, and audio inference, and optionally serve an OpenAI-compatible API.
Prerequisites
Confirm the architecture and available space before continuing:
If the board is not yet brought up, complete device setup first — see the
IQ-9075 EVK setup guide.
This is only applicable to IQ9 and please refer GenieX page for other platforms and select the supported model.
Install GenieX
1
Install standard APT packages
ocl-icd-libopencl1 is replaced by qcom-adreno1 in the next step; installing it
first keeps the dependency resolver happy on minimal images.2
Install the Qualcomm driver packages
geniex reaches the NPU through the Qualcomm proprietary driver libraries,
delivered from the ubuntu-qcom-iot PPA.The PPA (
ppa:ubuntu-qcom-iot/qcom-ppa) is pre-configured on the IQ9075 EVK Ubuntu
image. On a custom image, add it with
sudo add-apt-repository -y ppa:ubuntu-qcom-iot/qcom-ppa followed by sudo apt update..so, return here.3
Run the installer
If The script downloads the latest stable release, verifies its SHA256 checksum, and
installs without
HOME is unset — common in minimal containers or sudo -s sessions — export it
first:sudo.4
Add GenieX to your PATH
The installer prints the exact export line if the launcher directory is not already
on your
PATH. For example:5
Optional: install SoX for microphone input
Needed only for the
/mic command in an interactive session. Loading audio from
disk works without it.Verify the installation
geniex is not found, open a new shell or apply the PATH line the installer
printed. If the command fails on a missing shared library such as libCB.so.1 or
libcdsprpc.so.1.0.0, the Qualcomm driver packages are not installed — see step 2.
Add --log to any command to raise the log level. The flag is equivalent to the
GENIEX_LOG environment variable and takes precedence over it.
Download the model
For GGUF models the CLI prompts for a precision when more than one is published. Choose
Q4_0 for IQ9 — it is the quantization-aware-trained build and gives the best
accuracy per byte on the NPU. Pin it inline to skip the prompt in scripts:
pull copies files into the GenieX cache. After a successful --local-path pull you can
delete the source directory rather than keeping two copies of a ~5 GB model.Bundle contents
GenieX manages the GGUF bundle for you. It contains the quantized*.gguf weights, an
mmproj-*.gguf multimodal projector for image and audio input, tokenizer metadata
embedded in the GGUF container, and a manifest recording precision, runtime, and compute
defaults.
A Genie/QAIRT bundle — the w4a16 build, or output from the Jupyter path — is
instead explicit, and must contain:
Sample Genie configurations are published in the
AI Hub Apps repository;
for field definitions see the
Genie dialog JSON reference.
Run inference
Start an interactive chat session:Common flags
Multimodal prompts
Theq4_0 bundle ships an audio-capable projector, so a single prompt can carry both an
image and an audio clip. Download two sample files into your home directory:
Always use absolute paths for image and audio inputs. Relative paths resolve against
the process working directory and are a frequent source of “file not found” errors.
/mic records a clip instead of loading one from disk;
Ctrl-C stops recording and transcribes it. This requires SoX on your PATH.
Serve an OpenAI-compatible endpoint
For application integration, run the local server instead of the interactive CLI:reasoning_format field to move a thinking model’s chain-of-thought out
of message.content into message.reasoning_content, which keeps the rendered answer
clean while preserving the reasoning for logs.
Test with
curl from the device itself first. If the endpoint works locally but not
remotely, the server is bound to loopback or a firewall is blocking the port.Performance and best practices
On IQ9 the reference figures are a 4096-token context, ~660 tokens/s prefill, and ~17.9 tokens/s decode. Because decode is roughly 37× slower than prefill, output length dominates response time far more than prompt length.- Reuse the loaded model. Model load is the largest fixed cost — use
geniex serveor a long-lived interactive session rather than invokinggeniex inferper request. - Cap output length. Ask for “three bullet points” rather than “explain in detail” when latency matters.
- Keep prompts short. Prefill is fast, but prompt tokens still consume context that generation needs.
- Disable thinking mode (
--think=false) unless you consume the reasoning trace; it can multiply the number of generated tokens. - Right-size the context. KV-cache memory scales with context length, so do not configure a large window for a task that never needs it.
- Watch thermals. Sustained generation raises SoC temperature and triggers throttling; measure steady-state throughput, not just the first request.
- Keep storage headroom. Provision roughly double the ~5 GB bundle size to allow for upgrades.
Verify the result
If any check fails, see Troubleshooting.

