# MiniCPM-o 4.5 three-stage deploy on one large-memory GPU. pipeline: minicpmo_4_5 async_chunk: true # Use minicpmo_4_5_turn.yaml to select the ordinary turn-based serving engine. session_mode: duplex # Keep the active window aligned with the session and stage capacities below. # A smaller window serializes first-packet generation for concurrent chat turns. duplex_session: # Matches Stage 0/1 max_num_seqs below. max_sessions: 4 trust_remote_code: true enable_prefix_caching: false connectors: connector_of_shared_memory: name: SharedMemoryConnector extra: connector_get_sleep_s: 0.01 connector_get_max_wait_first_chunk: 3000 connector_get_max_wait: 300 codec_chunk_frames: 25 codec_left_context_frames: 3 # HiFT capture buckets are derived from codec_chunk_frames and # codec_left_context_frames. (#5869) # A future initial_codec_chunk_frames shape will use lazy capture unless # HiFTGraphWrapper.derive_capture_bucket_size explicitly includes it. enable_hift_graph: true enable_cfm_graph: true cfm_max_graphs: 32 cfm_graph_bucket_frames: 16 stages: - stage_id: 0 max_num_seqs: 4 # Leave headroom on the shared GPU for Talker KV + concurrent Code2Wav. gpu_memory_utilization: 0.55 enforce_eager: false tensor_parallel_size: 1 max_num_batched_tokens: 16384 devices: "0" # Required for MiniCPM interleaved image/audio Daily-Omni packs (~78% recipe). # Keep these in YAML so they are applied through --deploy-config. interleave_mm_strings: true media_io_kwargs: video: fps: 1 num_frames: 128 limit_mm_per_prompt: # Daily-Omni MiniCPM pack: up to 64 interleaved image/audio pairs (1fps). image: 64 audio: 64 video: 1 default_sampling_params: temperature: 0.0 top_p: 1.0 top_k: -1 max_tokens: 2048 seed: 42 detokenize: true # 1.0 for MCQ accuracy; 1.1 can bias short A–D answers. repetition_penalty: 1.0 - stage_id: 1 max_num_seqs: 4 # Preserve the checkpoint's full-attention Talker prompt while it fits; # native duplex rolls over to a one-chunk window at context capacity. # Leave device-level headroom for the colocated HiFi-GAN cuDNN workspace. gpu_memory_utilization: 0.15 enforce_eager: false max_num_batched_tokens: 8192 # Talker context is 4096 (tts_config.max_position_embeddings). max_model_len: 4096 devices: "0" output_connectors: to_stage_2: connector_of_shared_memory # Talker is a single-vocab codec LM. These knobs go to vLLM's Sampler # (head_code logits). EOS is tts_config.eos_token_id (num_audio_tokens-1). # Values track upstream utils.TTSSamplingParams (min_p/win_size/tau_r are # declared there but never read, so they stay out). repetition_penalty is # consumed by the Talker, which rescores it over upstream's 16-frame window # instead of the Sampler's whole-stream presence penalty. # min_tokens is upstream's min_new_token. default_sampling_params: temperature: 0.8 top_p: 0.85 top_k: 25 repetition_penalty: 1.05 min_tokens: 50 max_tokens: 4096 seed: 42 detokenize: false - stage_id: 2 max_num_seqs: 4 gpu_memory_utilization: 0.18 enforce_eager: true enable_chunked_prefill: false max_num_batched_tokens: 65536 max_model_len: 65536 devices: "0" input_connectors: from_stage_1: connector_of_shared_memory default_sampling_params: temperature: 0.0 top_p: 1.0 top_k: -1 max_tokens: 65536 detokenize: true platforms: cuda: stages: - stage_id: 1 # Full-attention occupancy is bounded by max_num_seqs * max_model_len # (4 * 4096 = 16384 tokens). Keep the reported CUDA KV token capacity # above that bound because physical-preemption replay is unsupported. # The explicit cap leaves device headroom for concurrent Stage 2. kv_cache_memory_bytes: 2147483648 # 2 GiB npu: stages: - stage_id: 0 max_num_batched_tokens: 8192 compilation_config: cudagraph_mode: PIECEWISE - stage_id: 1 max_num_batched_tokens: 8192 compilation_config: cudagraph_mode: PIECEWISE - stage_id: 2 # Stage 2 stays outer-eager and captures only exact-shape CFM DiT # estimator kernels through the NPU platform patch. additional_config: code2wav_enable_npu_graph: true code2wav_max_npu_graphs: 32