@@ -25,6 +25,7 @@ Arguments:
2525 - nvidia/diar_streaming_sortformer_4spk-v2
2626 - nvidia/parakeet-tdt
2727 - facebook/dinov2-small-imagenet1k-1-layer
28+ - meta-models/Muse-Glimmer-30B-GGUF
2829
2930 quant_name Quantization type (optional, default: non-quantized)
3031 Options:
@@ -33,13 +34,17 @@ Arguments:
3334 - quantized-int4-weight-only (CUDA only)
3435 - quantized-int4-metal (Metal only)
3536 - quantized-8da4w (XNNPACK only)
37+ - kquant-17gb (Muse Glimmer only)
38+ - kquant-dynamic (Muse Glimmer only)
3639
3740 output_dir Output directory for artifacts (optional, default: current directory)
3841
3942 mode Export mode (optional, default: vr-streaming)
4043 Supported modes:
4144 - vr-streaming: Voxtral Realtime streaming mode
4245 - vr-offline: Voxtral Realtime offline mode
46+ - solo-text: Muse Glimmer solo text mode
47+ - dflash-image: Muse Glimmer DFlash vision mode
4348
4449Examples:
4550 export_model_artifact.sh metal "openai/whisper-small"
@@ -53,6 +58,7 @@ Examples:
5358 export_model_artifact.sh xnnpack "nvidia/parakeet-tdt" "quantized-8da4w" "./output"
5459 export_model_artifact.sh xnnpack "mistralai/Voxtral-Mini-4B-Realtime-2602" "quantized-8da4w" "./output"
5560 export_model_artifact.sh xnnpack "mistralai/Voxtral-Mini-4B-Realtime-2602" "non-quantized" "./output" "vr-offline"
61+ export_model_artifact.sh cuda "meta-models/Muse-Glimmer-30B-GGUF" "kquant-17gb" "./output" "solo-text"
5662EOF
5763}
5864
@@ -89,9 +95,16 @@ if [ -n "$MODE" ]; then
8995 exit 1
9096 fi
9197 ;;
98+ solo-text|dflash-image)
99+ if [ " $HF_MODEL " != " meta-models/Muse-Glimmer-30B-GGUF" ]; then
100+ echo " Error: Mode '$MODE ' can only be used with Muse Glimmer model"
101+ echo " Provided model: $HF_MODEL "
102+ exit 1
103+ fi
104+ ;;
92105 * )
93106 echo " Error: Unsupported mode '$MODE '"
94- echo " Supported modes: vr-streaming, vr-offline"
107+ echo " Supported modes: vr-streaming, vr-offline, solo-text, dflash-image "
95108 exit 1
96109 ;;
97110 esac
@@ -203,9 +216,17 @@ case "$HF_MODEL" in
203216 PREPROCESSOR_FEATURE_SIZE=" "
204217 PREPROCESSOR_OUTPUT=" "
205218 ;;
219+ meta-models/Muse-Glimmer-30B-GGUF)
220+ MODEL_NAME=" muse_glimmer"
221+ TASK=" "
222+ MAX_SEQ_LEN=" "
223+ EXTRA_PIP=" "
224+ PREPROCESSOR_FEATURE_SIZE=" "
225+ PREPROCESSOR_OUTPUT=" "
226+ ;;
206227 * )
207228 echo " Error: Unsupported model '$HF_MODEL '"
208- echo " Supported models: mistralai/Voxtral-Mini-3B-2507, mistralai/Voxtral-Mini-4B-Realtime-2602, openai/whisper-{small, medium, large, large-v2, large-v3, large-v3-turbo}, google/gemma-3-4b-it, Qwen/Qwen3-0.6B, nvidia/diar_streaming_sortformer_4spk-v2, nvidia/parakeet-tdt, facebook/dinov2-small-imagenet1k-1-layer, SocialLocalMobile/Qwen3.5-35B-A3B-HQQ-INT4, unsloth/gemma-4-31B-it-GGUF"
229+ echo " Supported models: mistralai/Voxtral-Mini-3B-2507, mistralai/Voxtral-Mini-4B-Realtime-2602, openai/whisper-{small, medium, large, large-v2, large-v3, large-v3-turbo}, google/gemma-3-4b-it, Qwen/Qwen3-0.6B, nvidia/diar_streaming_sortformer_4spk-v2, nvidia/parakeet-tdt, facebook/dinov2-small-imagenet1k-1-layer, SocialLocalMobile/Qwen3.5-35B-A3B-HQQ-INT4, unsloth/gemma-4-31B-it-GGUF, meta-models/Muse-Glimmer-30B-GGUF "
209230 exit 1
210231 ;;
211232esac
@@ -243,13 +264,36 @@ case "$QUANT_NAME" in
243264 fi
244265 EXTRA_ARGS=" --qlinear 8da4w --qlinear_group_size 32 --qlinear_encoder 8da4w --qlinear_encoder_group_size 32"
245266 ;;
267+ kquant-17gb|kquant-dynamic)
268+ if [ " $HF_MODEL " != " meta-models/Muse-Glimmer-30B-GGUF" ]; then
269+ echo " Error: Quantization '$QUANT_NAME ' can only be used with Muse Glimmer model"
270+ echo " Provided model: $HF_MODEL "
271+ exit 1
272+ fi
273+ EXTRA_ARGS=" "
274+ ;;
246275 * )
247276 echo " Error: Unsupported quantization '$QUANT_NAME '"
248- echo " Supported quantizations: non-quantized, quantized-int4-tile-packed, quantized-int4-weight-only, quantized-int4-metal, quantized-8da4w"
277+ echo " Supported quantizations: non-quantized, quantized-int4-tile-packed, quantized-int4-weight-only, quantized-int4-metal, quantized-8da4w, kquant-17gb, kquant-dynamic "
249278 exit 1
250279 ;;
251280esac
252281
282+ if [ " $MODEL_NAME " = " muse_glimmer" ]; then
283+ if [ " $DEVICE " != " cuda" ]; then
284+ echo " Error: Muse Glimmer is only supported with the cuda device"
285+ exit 1
286+ fi
287+ if [ " $QUANT_NAME " != " kquant-17gb" ] && [ " $QUANT_NAME " != " kquant-dynamic" ]; then
288+ echo " Error: Muse Glimmer requires quantization 'kquant-17gb' or 'kquant-dynamic'"
289+ exit 1
290+ fi
291+ if [ " $MODE " != " solo-text" ] && [ " $MODE " != " dflash-image" ]; then
292+ echo " Error: Muse Glimmer requires mode 'solo-text' or 'dflash-image'"
293+ exit 1
294+ fi
295+ fi
296+
253297echo " ::group::Export $MODEL_NAME "
254298
255299if [ -n " $EXTRA_PIP " ]; then
@@ -470,6 +514,73 @@ if [ "$MODEL_NAME" = "qwen3_5_moe" ]; then
470514 exit 0
471515fi
472516
517+ # Muse Glimmer: download the selected GGUFs and export the requested CUDA configuration.
518+ if [ " $MODEL_NAME " = " muse_glimmer" ]; then
519+ pip install safetensors huggingface_hub gguf
520+
521+ LOCAL_MODEL_DIR=$( mktemp -d)
522+ INDUCTOR_CACHE=$( mktemp -d " ${RUNNER_TEMP:-/ tmp} /inductor_cache_XXXXXX" )
523+ INDUCTOR_TMPDIR=$( mktemp -d " ${RUNNER_TEMP:-/ tmp} /tmpdir_XXXXXX" )
524+ trap ' rm -rf "$LOCAL_MODEL_DIR" "$INDUCTOR_CACHE" "$INDUCTOR_TMPDIR"' EXIT
525+
526+ case " $QUANT_NAME " in
527+ kquant-17gb)
528+ TARGET_GGUF_FILE=" Muse-Glimmer-30B-KQuant-17GB-Q4_K_M.gguf"
529+ ;;
530+ kquant-dynamic)
531+ TARGET_GGUF_FILE=" Muse-Glimmer-30B-KQuant-Dynamic-Q4_K_XL.gguf"
532+ ;;
533+ esac
534+
535+ python -c " from huggingface_hub import hf_hub_download; hf_hub_download('${HF_MODEL} ', '${TARGET_GGUF_FILE} ', local_dir='${LOCAL_MODEL_DIR} ')"
536+ TARGET_GGUF_PATH=" ${LOCAL_MODEL_DIR} /${TARGET_GGUF_FILE} "
537+
538+ echo " ::group::Export"
539+ case " $MODE " in
540+ solo-text)
541+ EXPORT_START_SECONDS=$SECONDS
542+ TMPDIR=" $INDUCTOR_TMPDIR " \
543+ TORCHINDUCTOR_CACHE_DIR=" $INDUCTOR_CACHE " \
544+ python -m executorch.examples.models.muse_glimmer.export.export_solo \
545+ --gguf " $TARGET_GGUF_PATH " \
546+ --backend cuda \
547+ --output-dir " ${OUTPUT_DIR} "
548+ ;;
549+ dflash-image)
550+ DRAFT_GGUF_FILE=" dflash-Muse-Glimmer-30B-Q4_K_M.gguf"
551+ MMPROJ_GGUF_FILE=" mmproj-Muse-Glimmer-30B-Q4_K_M.gguf"
552+ python -c " from huggingface_hub import hf_hub_download; hf_hub_download('${HF_MODEL} ', '${DRAFT_GGUF_FILE} ', local_dir='${LOCAL_MODEL_DIR} ')"
553+ python -c " from huggingface_hub import hf_hub_download; hf_hub_download('${HF_MODEL} ', '${MMPROJ_GGUF_FILE} ', local_dir='${LOCAL_MODEL_DIR} ')"
554+ EXPORT_START_SECONDS=$SECONDS
555+ TMPDIR=" $INDUCTOR_TMPDIR " \
556+ TORCHINDUCTOR_CACHE_DIR=" $INDUCTOR_CACHE " \
557+ python -m executorch.examples.models.muse_glimmer.export.export_dflash \
558+ --target-gguf " $TARGET_GGUF_PATH " \
559+ --draft-gguf " ${LOCAL_MODEL_DIR} /${DRAFT_GGUF_FILE} " \
560+ --mmproj " ${LOCAL_MODEL_DIR} /${MMPROJ_GGUF_FILE} " \
561+ --backend cuda \
562+ --output-dir " ${OUTPUT_DIR} "
563+ ;;
564+ * )
565+ echo " Error: Muse Glimmer requires mode 'solo-text' or 'dflash-image'"
566+ exit 1
567+ ;;
568+ esac
569+ EXPORT_DURATION_SECONDS=$(( SECONDS - EXPORT_START_SECONDS))
570+ EXPORT_DURATION_MINUTES=$( awk -v seconds=" $EXPORT_DURATION_SECONDS " ' BEGIN {printf "%.2f", seconds / 60}' )
571+ echo " Muse Glimmer took ${EXPORT_DURATION_MINUTES} minutes to export."
572+ echo " ::endgroup::"
573+
574+ test -f " ${OUTPUT_DIR} /model.pte"
575+ test -f " ${OUTPUT_DIR} /aoti_cuda_blob.ptd"
576+ if [ " $MODE " = " dflash-image" ]; then
577+ test -f " ${OUTPUT_DIR} /pos_embed.bin"
578+ fi
579+ ls -al " ${OUTPUT_DIR} "
580+
581+ exit 0
582+ fi
583+
473584# Gemma 4 31B: download the Q4_K_M GGUF and export via the GGUF loader
474585if [ " $MODEL_NAME " = " gemma4_31b" ]; then
475586 pip install safetensors huggingface_hub gguf
0 commit comments