Record MiniCPM-o CPU GGUF complete-path evidence
This commit is contained in:
1 parent
bb8735effc
commit
445ca92ef1
190 files changed
+4625
-5
No files matched your search
@@ -0,0 +1,126 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Check generated Mandarin speech against its own text with local Whisper.
|
||||
|
||||
Character error rate is an intelligibility proxy, not a task-quality or
|
||||
speaker-fidelity score. It does not say whether the model understood its input.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
import re
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def sha256(path: Path) -> str:
|
||||
digest = hashlib.sha256()
|
||||
with path.open("rb") as stream:
|
||||
for block in iter(lambda: stream.read(8 << 20), b""):
|
||||
digest.update(block)
|
||||
return digest.hexdigest()
|
||||
|
||||
|
||||
def characters(value: str) -> list[str]:
|
||||
return re.findall(r"[\u4e00-\u9fff]|[a-z0-9]", value.casefold())
|
||||
|
||||
|
||||
def character_error_rate(reference: str, actual: str) -> float:
|
||||
expected, got = characters(reference), characters(actual)
|
||||
previous = list(range(len(got) + 1))
|
||||
for position, item in enumerate(expected, 1):
|
||||
current = [position]
|
||||
for index, candidate in enumerate(got, 1):
|
||||
current.append(min(
|
||||
current[-1] + 1,
|
||||
previous[index] + 1,
|
||||
previous[index - 1] + (item != candidate),
|
||||
))
|
||||
previous = current
|
||||
return previous[-1] / max(len(expected), 1)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--wav", type=Path, required=True)
|
||||
parser.add_argument("--reference-file", type=Path, required=True)
|
||||
parser.add_argument("--model-dir", type=Path, required=True)
|
||||
parser.add_argument("--model-revision", required=True)
|
||||
parser.add_argument("--output", type=Path, required=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
import librosa
|
||||
import numpy as np
|
||||
from opencc import OpenCC
|
||||
import soundfile as sf
|
||||
import torch
|
||||
import transformers
|
||||
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor
|
||||
|
||||
audio, sample_rate = sf.read(args.wav, dtype="float32", always_2d=False)
|
||||
if audio.ndim != 1 or not audio.size or not np.isfinite(audio).all():
|
||||
raise ValueError("expected finite mono audio")
|
||||
audio_16k = librosa.resample(audio, orig_sr=sample_rate, target_sr=16000)
|
||||
reference = args.reference_file.read_text(encoding="utf-8").strip()
|
||||
if not characters(reference):
|
||||
raise ValueError("reference text has no Mandarin or alphanumeric characters")
|
||||
started = time.perf_counter()
|
||||
processor = AutoProcessor.from_pretrained(str(args.model_dir), local_files_only=True)
|
||||
model = AutoModelForSpeechSeq2Seq.from_pretrained(
|
||||
str(args.model_dir), local_files_only=True
|
||||
).to("cpu")
|
||||
load_s = time.perf_counter() - started
|
||||
if {parameter.device.type for parameter in model.parameters()} != {"cpu"}:
|
||||
raise RuntimeError("Whisper was not wholly on CPU")
|
||||
started = time.perf_counter()
|
||||
transcripts = []
|
||||
segment_frames = 25 * 16000
|
||||
with torch.no_grad():
|
||||
for offset in range(0, len(audio_16k), segment_frames):
|
||||
features = processor(
|
||||
audio_16k[offset:offset + segment_frames],
|
||||
sampling_rate=16000,
|
||||
return_tensors="pt",
|
||||
return_attention_mask=True,
|
||||
)
|
||||
ids = model.generate(
|
||||
features.input_features, attention_mask=features.attention_mask,
|
||||
language="zh", task="transcribe",
|
||||
)
|
||||
transcripts.append(
|
||||
processor.batch_decode(ids, skip_special_tokens=True)[0].strip()
|
||||
)
|
||||
infer_s = time.perf_counter() - started
|
||||
transcript = "".join(transcripts)
|
||||
traditional_to_simplified = OpenCC("t2s")
|
||||
normalized_reference = traditional_to_simplified.convert(reference)
|
||||
normalized_transcript = traditional_to_simplified.convert(transcript)
|
||||
report = {
|
||||
"scope": "Whisper Mandarin ASR proxy for generated speech; no input-task or perceptual-quality claim",
|
||||
"asr_model": "openai/whisper-tiny",
|
||||
"asr_revision": args.model_revision,
|
||||
"asr_weights_sha256": sha256(args.model_dir / "model.safetensors"),
|
||||
"transformers": transformers.__version__,
|
||||
"torch": torch.__version__,
|
||||
"wav_sha256": sha256(args.wav),
|
||||
"wav_duration_s": len(audio) / sample_rate,
|
||||
"reference_text": reference,
|
||||
"transcript": transcript,
|
||||
"asr_segments_25_s": len(transcripts),
|
||||
"character_error_rate_raw": character_error_rate(reference, transcript),
|
||||
"character_error_rate_t2s_normalized": character_error_rate(
|
||||
normalized_reference, normalized_transcript
|
||||
),
|
||||
"normalization": "OpenCC 0.1.7 t2s; punctuation ignored",
|
||||
"load_s": load_s,
|
||||
"inference_s": infer_s,
|
||||
}
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.output.write_text(json.dumps(report, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
|
||||
print(json.dumps(report, indent=2, ensure_ascii=False))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Capture one local process's raw output, exit code, elapsed time and memory.
|
||||
|
||||
This wrapper samples RSS and private bytes; the values are observed maxima, not
|
||||
proof of the true loading peak between samples.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import subprocess
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
import psutil
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--cwd", type=Path, required=True)
|
||||
parser.add_argument("--stdout", type=Path, required=True)
|
||||
parser.add_argument("--stderr", type=Path, required=True)
|
||||
parser.add_argument("--report", type=Path, required=True)
|
||||
parser.add_argument("--sample-interval-ms", type=int, default=100)
|
||||
parser.add_argument("command", nargs=argparse.REMAINDER)
|
||||
args = parser.parse_args()
|
||||
if not args.command or args.sample_interval_ms < 10:
|
||||
parser.error("a command and sample interval >= 10 ms are required")
|
||||
command = args.command[1:] if args.command[0] == "--" else args.command
|
||||
for path in (args.stdout, args.stderr, args.report):
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
started = time.perf_counter()
|
||||
with args.stdout.open("wb") as stdout, args.stderr.open("wb") as stderr:
|
||||
child = subprocess.Popen(command, cwd=args.cwd, stdout=stdout, stderr=stderr)
|
||||
process = psutil.Process(child.pid)
|
||||
samples = 0
|
||||
peak_rss = 0
|
||||
peak_private = 0
|
||||
while child.poll() is None:
|
||||
try:
|
||||
memory = process.memory_info()
|
||||
except (psutil.NoSuchProcess, psutil.AccessDenied):
|
||||
break
|
||||
peak_rss = max(peak_rss, memory.rss)
|
||||
peak_private = max(peak_private, getattr(memory, "private", 0))
|
||||
samples += 1
|
||||
time.sleep(args.sample_interval_ms / 1000)
|
||||
exit_code = child.wait()
|
||||
report = {
|
||||
"command": command,
|
||||
"cwd": str(args.cwd),
|
||||
"exit_code": exit_code,
|
||||
"wall_s": time.perf_counter() - started,
|
||||
"memory_sample_interval_ms": args.sample_interval_ms,
|
||||
"memory_samples": samples,
|
||||
"peak_sampled_rss_bytes": peak_rss,
|
||||
"peak_sampled_private_bytes": peak_private,
|
||||
"measurement_note": "sampled process values, not guaranteed loading peaks",
|
||||
}
|
||||
args.report.write_text(json.dumps(report, indent=2) + "\n", encoding="utf-8")
|
||||
print(json.dumps(report, indent=2))
|
||||
if exit_code:
|
||||
raise SystemExit(exit_code)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,165 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Verify a complete MiniCPM-o C++ text/audio result and join its PCM chunks.
|
||||
|
||||
The upstream CLI currently writes wav_N.wav but its optional merger searches
|
||||
for tts_output_chunk_N.wav. This verifier checks the actual bounded sequence,
|
||||
then joins PCM frames without changing sample values.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import array
|
||||
import hashlib
|
||||
import json
|
||||
import math
|
||||
import re
|
||||
import wave
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ARTIFACTS = (
|
||||
"MiniCPM-o-4_5-Q4_K_M.gguf",
|
||||
"audio/MiniCPM-o-4_5-audio-F16.gguf",
|
||||
"vision/MiniCPM-o-4_5-vision-F16.gguf",
|
||||
"tts/MiniCPM-o-4_5-tts-F16.gguf",
|
||||
"tts/MiniCPM-o-4_5-projector-F16.gguf",
|
||||
"token2wav-gguf/encoder.gguf",
|
||||
"token2wav-gguf/flow_matching.gguf",
|
||||
"token2wav-gguf/flow_extra.gguf",
|
||||
"token2wav-gguf/hifigan2.gguf",
|
||||
"token2wav-gguf/prompt_cache.gguf",
|
||||
)
|
||||
|
||||
|
||||
def sha256(path: Path) -> str:
|
||||
digest = hashlib.sha256()
|
||||
with path.open("rb") as stream:
|
||||
for chunk in iter(lambda: stream.read(8 << 20), b""):
|
||||
digest.update(chunk)
|
||||
return digest.hexdigest()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--output-dir", type=Path, required=True)
|
||||
parser.add_argument("--run-log", type=Path, required=True)
|
||||
parser.add_argument("--runtime-bin", type=Path, required=True)
|
||||
parser.add_argument("--model-dir", type=Path, required=True)
|
||||
parser.add_argument("--model-revision", required=True)
|
||||
parser.add_argument("--input-image", type=Path, required=True)
|
||||
parser.add_argument("--input-audio", type=Path, required=True)
|
||||
parser.add_argument("--merged-wav", type=Path, required=True)
|
||||
parser.add_argument("--report", type=Path, required=True)
|
||||
parser.add_argument("--platform-label", default="WSL CPU")
|
||||
parser.add_argument("--process-profile", type=Path)
|
||||
args = parser.parse_args()
|
||||
|
||||
output_dir = args.output_dir.resolve(strict=True)
|
||||
log = args.run_log.read_text(encoding="utf-8", errors="replace")
|
||||
required_log = (
|
||||
"Media type: 2 (omni: audio+vision)",
|
||||
"GPU layers: 0",
|
||||
"Token2Wav device: cpu",
|
||||
"vision_ctx: vision using CPU backend",
|
||||
"Token2Wav: initialized successfully",
|
||||
"stream_prefill(index=1): processing user audio:",
|
||||
"stream_prefill(index=1): user audio embedding:",
|
||||
"stream_prefill: prefilled 1 vision chunks",
|
||||
)
|
||||
missing_log = [item for item in required_log if item not in log]
|
||||
if missing_log:
|
||||
raise RuntimeError(f"missing complete-path/placement evidence: {missing_log}")
|
||||
process_profile = None
|
||||
if args.process_profile:
|
||||
process_profile = json.loads(args.process_profile.read_text(encoding="utf-8"))
|
||||
if process_profile["exit_code"] != 0:
|
||||
raise RuntimeError("profiled process exited with an error")
|
||||
elif "Exit status: 0" not in log:
|
||||
raise RuntimeError("/usr/bin/time did not report exit status 0")
|
||||
wave_dir = output_dir / "round_000" / "tts_wav"
|
||||
if not (wave_dir / "generation_done.flag").is_file():
|
||||
raise RuntimeError("Token2Wav did not finish")
|
||||
chunk_paths = sorted(
|
||||
wave_dir.glob("wav_*.wav"),
|
||||
key=lambda path: int(re.fullmatch(r"wav_(\d+)\.wav", path.name).group(1)),
|
||||
)
|
||||
if not 0 < len(chunk_paths) <= 256:
|
||||
raise RuntimeError("no bounded audio chunk sequence")
|
||||
if [path.name for path in chunk_paths] != [f"wav_{i}.wav" for i in range(len(chunk_paths))]:
|
||||
raise RuntimeError("audio chunk sequence has a gap or duplicate")
|
||||
|
||||
pcm_chunks: list[bytes] = []
|
||||
chunks: list[dict] = []
|
||||
square_sum = 0
|
||||
frames_total = 0
|
||||
for path in chunk_paths:
|
||||
with wave.open(str(path), "rb") as source:
|
||||
fmt = (source.getnchannels(), source.getsampwidth(), source.getframerate())
|
||||
if fmt != (1, 2, 24000):
|
||||
raise RuntimeError(f"invalid PCM16 mono 24 kHz chunk: {path.name}, {fmt}")
|
||||
frames = source.getnframes()
|
||||
if not 0 < frames <= 24000 * 10:
|
||||
raise RuntimeError(f"invalid bounded chunk length: {path.name}, {frames}")
|
||||
pcm = source.readframes(frames)
|
||||
if len(pcm) != frames * 2:
|
||||
raise RuntimeError(f"truncated audio chunk: {path.name}")
|
||||
samples = array.array("h")
|
||||
samples.frombytes(pcm)
|
||||
square_sum += sum(int(value) ** 2 for value in samples)
|
||||
frames_total += frames
|
||||
pcm_chunks.append(pcm)
|
||||
chunks.append({"name": path.name, "frames": frames, "sha256": sha256(path)})
|
||||
if frames_total > 24000 * 120 or square_sum == 0:
|
||||
raise RuntimeError("assembled audio is too long or silent")
|
||||
pcm = b"".join(pcm_chunks)
|
||||
args.merged_wav.parent.mkdir(parents=True, exist_ok=True)
|
||||
with wave.open(str(args.merged_wav), "wb") as target:
|
||||
target.setnchannels(1)
|
||||
target.setsampwidth(2)
|
||||
target.setframerate(24000)
|
||||
target.writeframes(pcm)
|
||||
|
||||
text_dir = output_dir / "round_000" / "llm_debug"
|
||||
text_paths = sorted(
|
||||
text_dir.glob("chunk_*/llm_text.txt"),
|
||||
key=lambda path: int(path.parent.name.removeprefix("chunk_")),
|
||||
)
|
||||
response_text = "".join(path.read_text(encoding="utf-8") for path in text_paths).strip()
|
||||
if not response_text:
|
||||
raise RuntimeError("language stage returned no text")
|
||||
memory_match = re.search(r"Maximum resident set size \(kbytes\): (\d+)", log)
|
||||
wall_match = re.search(r"Elapsed \(wall clock\) time \(h:mm:ss or m:ss\): ([\d:.]+)", log)
|
||||
model_dir = args.model_dir.resolve(strict=True)
|
||||
artifacts = {}
|
||||
for name in ARTIFACTS:
|
||||
path = model_dir / name
|
||||
artifacts[name] = {"bytes": path.stat().st_size, "sha256": sha256(path)}
|
||||
report = {
|
||||
"scope": f"standalone MiniCPM-o 4.5 GGUF audio+image input to text+speech on {args.platform_label}",
|
||||
"status": "scoped_complete_path_pass",
|
||||
"quality": "synthetic red-square/tone response not established as semantically correct",
|
||||
"model_revision": args.model_revision,
|
||||
"artifacts": artifacts,
|
||||
"runtime_binary_sha256": sha256(args.runtime_bin),
|
||||
"input_image_sha256": sha256(args.input_image),
|
||||
"input_audio_sha256": sha256(args.input_audio),
|
||||
"response_text": response_text,
|
||||
"audio_chunks": chunks,
|
||||
"audio_frames": frames_total,
|
||||
"audio_duration_s": frames_total / 24000,
|
||||
"audio_rms_pcm16": math.sqrt(square_sum / frames_total),
|
||||
"pcm_sha256": hashlib.sha256(pcm).hexdigest(),
|
||||
"merged_wav_sha256": sha256(args.merged_wav),
|
||||
"peak_rss_kib_from_time": int(memory_match.group(1)) if memory_match else None,
|
||||
"wall_clock_from_time": wall_match.group(1) if wall_match else None,
|
||||
"sampled_process_profile": process_profile,
|
||||
"upstream_merge_name_mismatch": "TTS: no valid WAV files to merge" in log,
|
||||
}
|
||||
args.report.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.report.write_text(json.dumps(report, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
|
||||
print(json.dumps({key: value for key, value in report.items() if key != "artifacts"}, indent=2, ensure_ascii=False))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,6 +1,6 @@
|
||||
# 2026-09-23 WSL CPU and native Windows expansion
|
||||
|
||||
This extends the [60-cell device × model matrix](../e2e_profiling_20260922/evidence/summary/README.md) with previously unrun WSL CPU and native Windows paths. The September 22 timing tables remain historical. MiniCPM-o now has separate 20-request serial text-to-speech timing runs on WSL CPU and native Windows GPU, plus one synthetic image and one synthetic audio input on each platform; each InternVLA timing remains one observation. Spark has a 20-request Omni output-head component profile on the HX370 AMD NPU and separate 20-request **complete text** profiles through standalone llama.cpp on native Windows CPU and Radeon 890M. The latter now also run as bounded whole-session Omni stages, with public AsyncOmni requests checked separately. Qwen3-TTS has separate 20-request standalone and bounded Omni whole-session text-to-WAV profiles on native Windows CPU; the CPU+Radeon 890M hybrid route likewise has standalone and Omni profiles. None is a sustained or full-modality profile. The [checkpoint manifests](../e2e_recovery_20260923/README.md) pin the earlier real weights; the [Spark NPU component record](evidence/spark_amd_npu_output_head/README.md), [standalone CPU/Radeon whole-model record](evidence/spark_radeon890m_llamacpp/README.md), [Omni CPU/Radeon whole-session record](evidence/spark_omni_llamacpp/README.md), [standalone CPU Qwen TTS record](evidence/qwen_tts_native_cpu/README.md), [Omni CPU Qwen TTS record](evidence/qwen_tts_omni_cpu/README.md), [standalone joint CPU+Radeon TTS record](evidence/qwen_tts_radeon890m_joint/README.md), and [Omni joint TTS record](evidence/qwen_tts_omni_hybrid/README.md) pin their respective artifacts. No model, precision or context was silently substituted.
|
||||
This extends the [60-cell device × model matrix](../e2e_profiling_20260922/evidence/summary/README.md) with previously unrun WSL CPU and native Windows paths. The September 22 timing tables remain historical. MiniCPM-o now has separate 20-request serial text-to-speech timing runs on WSL CPU and native Windows GPU, plus one synthetic image and one synthetic audio input on each platform. A separate pinned GGUF route ran one **combined** image+audio to text+speech request on WSL CPU and native Windows CPU; these C++ runs are standalone, with unqualified input-grounded quality. Each InternVLA timing remains one observation. Spark has a 20-request Omni output-head component profile on the HX370 AMD NPU and separate 20-request **complete text** profiles through standalone llama.cpp on native Windows CPU and Radeon 890M. The latter now also run as bounded whole-session Omni stages, with public AsyncOmni requests checked separately. Qwen3-TTS has separate 20-request standalone and bounded Omni whole-session text-to-WAV profiles on native Windows CPU; the CPU+Radeon 890M hybrid route likewise has standalone and Omni profiles. None is a sustained or full-modality profile. The [checkpoint manifests](../e2e_recovery_20260923/README.md) pin the earlier real weights; the [Spark NPU component record](evidence/spark_amd_npu_output_head/README.md), [standalone CPU/Radeon whole-model record](evidence/spark_radeon890m_llamacpp/README.md), [Omni CPU/Radeon whole-session record](evidence/spark_omni_llamacpp/README.md), [standalone CPU Qwen TTS record](evidence/qwen_tts_native_cpu/README.md), [Omni CPU Qwen TTS record](evidence/qwen_tts_omni_cpu/README.md), [standalone joint CPU+Radeon TTS record](evidence/qwen_tts_radeon890m_joint/README.md), and [Omni joint TTS record](evidence/qwen_tts_omni_hybrid/README.md) pin their respective artifacts. No model, precision or context was silently substituted.
|
||||
|
||||
| Device / model | Verified depth | Observed output and time | Remaining gate |
|
||||
|---|---|---|---|
|
||||
@@ -16,6 +16,8 @@ This extends the [60-cell device × model matrix](../e2e_profiling_20260922/evid
|
||||
| WSL CPU / MiniCPM-o 4.5, revision `503e754207c94da6bb26850b4469f367c9ea3582` | Scoped complete three-stage text-to-text+speech path (P for this input only) | Coherent text and a 5.2 s mono 24 kHz WAV. First request 27.09 s after 73.65 s startup; separate 1-warmup/20-measured serial run: startup 73.89 s, request wall p50 21.86 s/p95 22.97 s. | Speech intelligibility/alignment, real image/audio quality, video input, concurrency, interruption, power and thermal behavior. |
|
||||
| WSL CPU / MiniCPM-o 4.5, same revision | Scoped three-stage **image**-to-text+speech path (P for one synthetic image) | For the 448×448 red square, returned a correct description and nonzero 5.2 s WAV. Startup 112.44 s; one request 37.70 s. Text and token IDs differed from WSL GPU while describing the same visible content. | Real-image suite, speech meaning, repeated latency, memory admission and clean shutdown. |
|
||||
| WSL CPU / MiniCPM-o 4.5, same revision | Scoped three-stage **audio**-to-text+speech path (P for one synthetic clip) | For the 2 s, 440 Hz tone, answered “A loud and high pitched beep” and produced a nonzero 2.16 s WAV. Startup 101.22 s; one request 17.30 s. Text and token IDs differed from WSL GPU. | Real-audio and transcription suites, speech meaning, repeated latency, memory admission and clean shutdown. |
|
||||
| WSL CPU / MiniCPM-o 4.5, separate pinned Q4_K_M/F16 GGUF set | Standalone C++ whole-chain **combined synthetic image+audio** input to text+speech (P for this request; not an Omni stage or a semantic-quality pass) | The vision and audio encoders, language model, TTS and CPU Token2Wav ran in one process. One cold 40.70 s run returned generic text and ten nonempty 24 kHz chunks, assembled into a 9.24 s WAV; peak RSS from `/usr/bin/time` was 13,369,604 KiB (~12.75 GiB). Whisper tiny ASR gave 9.30% script-normalized character error against the generated text as an intelligibility proxy. The text did not describe the red square or tone. | Compare task quality against a prompted input/reference, fix upstream WAV merge naming, bind Omni placement, repeat latency, cancellation and sustained use; [C++ raw evidence](evidence/minicpmo_cpp_cpu/README.md). |
|
||||
| Native Windows HX370 CPU / MiniCPM-o 4.5, same pinned Q4_K_M/F16 GGUF set | Standalone C++ whole-chain **combined synthetic image+audio** input to text+speech (P for this request; outside Omni) | The corrected x86-64-v3 build and bounded audio wait completed a cold run in 137.34 s, with 50 nonempty 24 kHz WAV chunks/49.16 s and sampled peak RSS/private bytes 13.10/13.31 GB. Whisper tiny ASR gave 13.59% script-normalized character error against the generated text. The response was generic and input-grounded quality remains unqualified. The first generic cross-build exited 0 with only 15 chunks and no completion flag, preserved as a failed attempt. | Bind an Omni whole-session stage and admission/state contract, prompt and qualify image/audio quality, fix live WAV merge/streaming, repeat latency, cancellation and sustained thermal behavior; [complete raw evidence](evidence/minicpmo_cpp_windows_cpu/README.md), [failed run](evidence/minicpmo_cpp_windows_cpu_attempt1/README.md). |
|
||||
| Native Windows RTX 5090 Laptop / MiniCPM-o 4.5, same revision | Scoped complete three-stage text-to-text+speech path (P for this input only) | Coherent text with the same 32 thinker token IDs as WSL CUDA, and a nonzero 5.2 s mono 24 kHz WAV. First engine startup 297.20 s and request 78.75 s, including first-use graph/JIT work; separate 1-warmup/20-measured serial run: startup 239.05 s, request wall p50 18.38 s/p95 18.73 s. | Speech intelligibility/alignment, real image/audio quality, video input, concurrency, interruption, loading peak and sustained behavior. |
|
||||
| WSL RTX 5090 Laptop / MiniCPM-o 4.5, same revision | Scoped three-stage **image**-to-text+speech path (P for one synthetic image) | For a 448×448 red square on white, returned the correct visual description and a nonzero 5.2 s WAV. Engine startup 101.96 s; one request 17.49 s. | Broader visual quality, real images, audio/video inputs, speech intelligibility, repeated latency and cleanup reliability. |
|
||||
| WSL RTX 5090 Laptop / MiniCPM-o 4.5, same revision | Scoped three-stage **audio**-to-text+speech path (P for one synthetic clip) | For a 2 s, 440 Hz tone at 16 kHz, answered “A loud whistling sound” and produced a nonzero 2.16 s WAV. Engine startup 105.94 s; one request 7.78 s. | Speech transcription/real audio quality, video input, speech intelligibility, repeated latency and shared-memory cleanup. |
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
# MiniCPM-o 4.5 GGUF whole-chain CPU feasibility run
|
||||
|
||||
This is a **standalone scoped complete-path** audio+image-to-text+speech run on the local Ryzen AI 9 HX 370 under Ubuntu 26.04/WSL2 (`6.18.33.2-microsoft-standard-WSL2`). It is an additional backend feasibility result for the already-scoped WSL CPU × MiniCPM-o cell, not an Omni integration, a native Windows result, a Radeon/NPU result, or a semantic-quality pass. The generated response to a synthetic 448×448 red square and 2 s/440 Hz tone was generic rather than a description of those inputs.
|
||||
|
||||
The complete ten-file artifact set came from [openbmb/MiniCPM-o-4_5-gguf](https://huggingface.co/openbmb/MiniCPM-o-4_5-gguf/tree/db25077c33951fe163b42986fba0132e279872a2) revision `db25077c33951fe163b42986fba0132e279872a2`: Q4_K_M language model, F16 vision/audio/TTS/projector and five Token2Wav GGUF files. [The report](minicpm_omni_cpu_full_report.json) records the byte count and SHA256 of each. The C++ source is [tc-mb/llama.cpp-omni](https://github.com/tc-mb/llama.cpp-omni/tree/5202b7b2f4d11f50b9f996161e7a2f8b8571b890) at `5202b7b2f4d11f50b9f996161e7a2f8b8571b890`, built locally with GCC 15.2, CMake 4.2.3, `GGML_CUDA=OFF`, `GGML_VULKAN=OFF`, and [this small CLI patch](llama_cpp_omni_cpu.patch) adding an explicit CPU Token2Wav selector and a portable wait. The binary SHA256 is in the report. The current branch has a CLI target but no `llama-omni-server` CMake target, so this result remains outside the Omni StageRuntime.
|
||||
|
||||
| Observation | Evidence |
|
||||
|---|---|
|
||||
| The runtime logged `GPU layers: 0`, `vision using CPU backend`, and CPU Token2Wav/vocoder placement. Prefill index 0 was the system/reference-audio prompt; index 1 actually encoded one JPEG vision chunk (64 tokens) and the 16 kHz user audio (20 positions). | [raw runtime and `/usr/bin/time` log](minicpm_omni_cpu_full.log), [input JPEG](fixture_0001.jpg), [input WAV](fixture_0001.wav) |
|
||||
| The decoder returned nonempty [text](response_text.txt), TTS generated audio tokens, and the vocoder wrote ten sequential, nonempty mono 24 kHz PCM16 [chunks](output/round_000/tts_wav/). The bounded verifier joined their original PCM into a [9.24 s WAV](minicpm_omni_cpu_full_merged.wav), 221,760 frames, PCM SHA256 `372c4c7b453849eb1843b0477ce74d5db04a46cacc663ef01d02698f34a1a158`, RMS 2,452.44 in PCM16 units. | [verification report](minicpm_omni_cpu_full_report.json), [raw chunks and timing](output/round_000/tts_wav/) |
|
||||
| Pinned `openai/whisper-tiny` on CPU transcribed the generated Mandarin WAV with 9.30% CJK/alphanumeric character error against the model's own text after OpenCC traditional-to-simplified normalization; unnormalized error was 32.56%. This is an intelligibility proxy, not a human listening score or input-grounded correctness. | [ASR report](speech_asr_proxy.json), [raw ASR log](speech_asr_proxy.log), [probe](../../../../experiments/probe_tts_asr_cjk.py) |
|
||||
| The one cold process completed in 40.70 s; `/usr/bin/time` reported 13,369,604 KiB maximum RSS. The Token2Wav calls in the raw log were roughly 2 s per 1 s output after the first call, so this CPU route was slower than real time. This is one observation, not a p50/p95 or sustained profile. | [raw log](minicpm_omni_cpu_full.log) |
|
||||
|
||||
The C++ runtime's optional merger searched for `tts_output_chunk_N.wav` while its vocoder wrote `wav_N.wav`, and it attempted merging before all vocoder work ended. The raw log preserves its “no valid WAV files to merge” message. [The verifier](../../../../experiments/verify_minicpm_cpp_output.py) checks the completion flag, contiguous names, format, duration bound, nonzero samples, nonempty text and logged CPU placement before assembling the actual chunks. It does not repair the runtime's live streaming behavior. The text response did not establish input-grounded quality; the quantized language artifact must be compared against the same task/reference before release qualification. Playable streaming, request cancellation, loading peak, 20-request latency and 30-minute power/thermal behavior remain unverified.
|
||||
|
||||
Reproduce from a local checkout of the pinned C++ commit after applying the recorded patch and downloading the exact GGUF revision:
|
||||
|
||||
```bash
|
||||
cmake -S . -B build-cpu -G Ninja -DCMAKE_BUILD_TYPE=Release \
|
||||
-DGGML_CUDA=OFF -DGGML_VULKAN=OFF -DLLAMA_CURL=OFF \
|
||||
-DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=ON
|
||||
cmake --build build-cpu --target llama-omni-cli -j 8
|
||||
OMP_NUM_THREADS=8 timeout 900 /usr/bin/time -v ./build-cpu/bin/llama-omni-cli \
|
||||
-m /path/to/MiniCPM-o-4_5-gguf/MiniCPM-o-4_5-Q4_K_M.gguf \
|
||||
-ngl 0 -c 2048 --omni --t2w-device cpu \
|
||||
--test /path/to/fixture_ 2
|
||||
```
|
||||
|
||||
The fixture must have both `fixture_0000.wav` for index 0 and `fixture_0001.wav` plus `fixture_0001.jpg` for the user observation. The recorded run reused the same tone at indices 0 and 1; the image is the JPEG conversion of the previous [red-square fixture](../minicpmo_wsl_image/red_square.png). The weights and local build remain outside Git.
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
|
After Width: | Height: | Size: 5.7 KiB |
BIN
Binary file not shown.
+121
@@ -0,0 +1,121 @@
|
||||
diff --git a/tools/omni/omni-cli.cpp b/tools/omni/omni-cli.cpp
|
||||
index 2e9623a..769786d 100644
|
||||
--- a/tools/omni/omni-cli.cpp
|
||||
+++ b/tools/omni/omni-cli.cpp
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <chrono>
|
||||
+#include <thread>
|
||||
#include <vector>
|
||||
#include <limits.h>
|
||||
#include <cinttypes>
|
||||
@@ -61,6 +62,8 @@ static void show_usage(const char * prog_name) {
|
||||
" --ref-audio <path> Reference audio for voice cloning (default: tools/omni/assets/default_ref_audio/default_ref_audio.wav)\n"
|
||||
" -c, --ctx-size <n> Context size (default: 4096)\n"
|
||||
" -ngl <n> Number of GPU layers (default: 99)\n"
|
||||
+ " --t2w-device <mode> Token2Wav device: cpu or gpu:<index> (default: gpu:0)\n"
|
||||
+ " --t2w-wait-seconds <n> Fail if async audio is incomplete after n seconds (default: 120)\n"
|
||||
" --no-tts Disable TTS output\n"
|
||||
" --omni Enable omni mode (audio + vision, media_type=2)\n"
|
||||
" --vision-backend <mode> Vision compute backend: 'metal' (default) or 'coreml' (ANE)\n"
|
||||
@@ -209,6 +212,8 @@ int main(int argc, char ** argv) {
|
||||
std::string ref_audio_path = "tools/omni/assets/default_ref_audio/default_ref_audio.wav";
|
||||
int n_ctx = 4096;
|
||||
int n_gpu_layers = 99; // GPU 层数,默认 99
|
||||
+ std::string token2wav_device = "gpu:0";
|
||||
+ int token2wav_wait_seconds = 120;
|
||||
int media_type = 1; // 1=audio only, 2=omni (audio+vision)
|
||||
bool use_tts = true;
|
||||
bool run_test = false;
|
||||
@@ -247,6 +252,20 @@ int main(int argc, char ** argv) {
|
||||
else if (arg == "-ngl" && i + 1 < argc) {
|
||||
n_gpu_layers = std::atoi(argv[++i]);
|
||||
}
|
||||
+ else if (arg == "--t2w-device" && i + 1 < argc) {
|
||||
+ token2wav_device = argv[++i];
|
||||
+ if (token2wav_device != "cpu" && token2wav_device.rfind("gpu:", 0) != 0) {
|
||||
+ fprintf(stderr, "Error: --t2w-device must be cpu or gpu:<index>\n");
|
||||
+ return 1;
|
||||
+ }
|
||||
+ }
|
||||
+ else if (arg == "--t2w-wait-seconds" && i + 1 < argc) {
|
||||
+ token2wav_wait_seconds = std::atoi(argv[++i]);
|
||||
+ if (token2wav_wait_seconds < 1 || token2wav_wait_seconds > 3600) {
|
||||
+ fprintf(stderr, "Error: --t2w-wait-seconds must be 1..3600\n");
|
||||
+ return 1;
|
||||
+ }
|
||||
+ }
|
||||
else if (arg == "--no-tts") {
|
||||
use_tts = false;
|
||||
}
|
||||
@@ -339,6 +358,7 @@ int main(int argc, char ** argv) {
|
||||
printf(" TTS enabled: %s\n", use_tts ? "yes" : "no");
|
||||
printf(" Context size: %d\n", n_ctx);
|
||||
printf(" GPU layers: %d\n", n_gpu_layers);
|
||||
+ printf(" Token2Wav device: %s\n", token2wav_device.c_str());
|
||||
printf(" Vision backend: %s\n", vision_backend.c_str());
|
||||
if (vision_backend == "coreml") {
|
||||
printf(" Vision CoreML: %s\n", vision_coreml_model_path.c_str());
|
||||
@@ -347,7 +367,8 @@ int main(int argc, char ** argv) {
|
||||
printf(" Ref audio: %s\n", ref_audio_path.c_str());
|
||||
|
||||
// 🔧 Token2Wav 使用 GPU(Metal),已用 ggml_add+ggml_repeat 替代不支持的 ggml_add1
|
||||
- auto ctx_omni = omni_init(¶ms, media_type, use_tts, tts_bin_dir, -1, "gpu:0");
|
||||
+ auto ctx_omni = omni_init(¶ms, media_type, use_tts, tts_bin_dir,
|
||||
+ token2wav_device == "cpu" ? 0 : -1, token2wav_device);
|
||||
if (ctx_omni == nullptr) {
|
||||
fprintf(stderr, "Error: Failed to initialize omni context\n");
|
||||
return 1;
|
||||
@@ -366,13 +387,19 @@ int main(int argc, char ** argv) {
|
||||
}
|
||||
|
||||
// 等待 T2W 完成所有音频生成后再停止线程
|
||||
+ bool audio_complete = true;
|
||||
if(ctx_omni->async && ctx_omni->use_tts) {
|
||||
std::string done_flag = std::string(ctx_omni->base_output_dir) + "/round_000/tts_wav/generation_done.flag";
|
||||
fprintf(stderr, "Waiting for audio generation to complete...\n");
|
||||
- for (int i = 0; i < 1200; ++i) { // 最多等 120 秒
|
||||
+ audio_complete = false;
|
||||
+ for (int i = 0; i < token2wav_wait_seconds * 10; ++i) {
|
||||
FILE * f = fopen(done_flag.c_str(), "r");
|
||||
- if (f) { fclose(f); fprintf(stderr, "Audio generation completed.\n"); break; }
|
||||
- usleep(100000); // 100ms
|
||||
+ if (f) { fclose(f); audio_complete = true; fprintf(stderr, "Audio generation completed.\n"); break; }
|
||||
+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||
+ }
|
||||
+ if (!audio_complete) {
|
||||
+ fprintf(stderr, "Error: audio generation did not complete within %d seconds.\n",
|
||||
+ token2wav_wait_seconds);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -386,5 +413,8 @@ int main(int argc, char ** argv) {
|
||||
llama_perf_context_print(ctx_omni->ctx_llama);
|
||||
|
||||
omni_free(ctx_omni);
|
||||
+ if (!audio_complete) {
|
||||
+ return 2;
|
||||
+ }
|
||||
return 0;
|
||||
}
|
||||
diff --git a/tools/omni/omni.h b/tools/omni/omni.h
|
||||
index 145f515..b35c459 100644
|
||||
--- a/tools/omni/omni.h
|
||||
+++ b/tools/omni/omni.h
|
||||
@@ -13,7 +13,7 @@
|
||||
#include <atomic>
|
||||
|
||||
// Windows compatibility: pid_t is not defined on MSVC
|
||||
-#ifdef _WIN32
|
||||
+#if defined(_WIN32) && !defined(__MINGW32__)
|
||||
typedef int pid_t;
|
||||
#endif
|
||||
|
||||
@@ -485,4 +485,4 @@ void sliding_window_reset(struct omni_context * ctx_omni);
|
||||
|
||||
// ==================== 高清模式函数声明 ====================
|
||||
// 设置 vision max_slice_nums 覆盖值,用于高清模式
|
||||
-void vision_set_max_slice_nums(struct vision_ctx * ctx_vision, int max_slice_nums);
|
||||
\ No newline at end of file
|
||||
+void vision_set_max_slice_nums(struct vision_ctx * ctx_vision, int max_slice_nums);
|
||||
+589
@@ -0,0 +1,589 @@
|
||||
build: 64 (5202b7b) with cc (Ubuntu 15.2.0-16ubuntu1) 15.2.0 for x86_64-linux-gnu
|
||||
llama_model_loader: loaded meta data with 27 key-value pairs and 399 tensors from /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/MiniCPM-o-4_5-Q4_K_M.gguf (version GGUF V3 (latest))
|
||||
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
|
||||
llama_model_loader: - kv 0: general.architecture str = qwen3
|
||||
llama_model_loader: - kv 1: general.type str = model
|
||||
llama_model_loader: - kv 2: general.name str = Llm
|
||||
llama_model_loader: - kv 3: general.size_label str = 8.2B
|
||||
llama_model_loader: - kv 4: qwen3.block_count u32 = 36
|
||||
llama_model_loader: - kv 5: qwen3.context_length u32 = 40960
|
||||
llama_model_loader: - kv 6: qwen3.embedding_length u32 = 4096
|
||||
llama_model_loader: - kv 7: qwen3.feed_forward_length u32 = 12288
|
||||
llama_model_loader: - kv 8: qwen3.attention.head_count u32 = 32
|
||||
llama_model_loader: - kv 9: qwen3.attention.head_count_kv u32 = 8
|
||||
llama_model_loader: - kv 10: qwen3.rope.freq_base f32 = 1000000.000000
|
||||
llama_model_loader: - kv 11: qwen3.attention.layer_norm_rms_epsilon f32 = 0.000001
|
||||
llama_model_loader: - kv 12: qwen3.attention.key_length u32 = 128
|
||||
llama_model_loader: - kv 13: qwen3.attention.value_length u32 = 128
|
||||
llama_model_loader: - kv 14: tokenizer.ggml.model str = gpt2
|
||||
llama_model_loader: - kv 15: tokenizer.ggml.pre str = qwen2
|
||||
llama_model_loader: - kv 16: tokenizer.ggml.tokens arr[str,151748] = ["!", "\"", "#", "$", "%", "&", "'", ...
|
||||
llama_model_loader: - kv 17: tokenizer.ggml.token_type arr[i32,151748] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
|
||||
llama_model_loader: - kv 18: tokenizer.ggml.merges arr[str,151387] = ["Ġ Ġ", "ĠĠ ĠĠ", "i n", "Ġ t",...
|
||||
llama_model_loader: - kv 19: tokenizer.ggml.bos_token_id u32 = 151644
|
||||
llama_model_loader: - kv 20: tokenizer.ggml.eos_token_id u32 = 151645
|
||||
llama_model_loader: - kv 21: tokenizer.ggml.unknown_token_id u32 = 128244
|
||||
llama_model_loader: - kv 22: tokenizer.ggml.padding_token_id u32 = 151643
|
||||
llama_model_loader: - kv 23: tokenizer.ggml.add_bos_token bool = false
|
||||
llama_model_loader: - kv 24: tokenizer.chat_template str = {%- if tools %}\n {{- '<|im_start|>...
|
||||
llama_model_loader: - kv 25: general.quantization_version u32 = 2
|
||||
llama_model_loader: - kv 26: general.file_type u32 = 15
|
||||
llama_model_loader: - type f32: 145 tensors
|
||||
llama_model_loader: - type q4_K: 217 tensors
|
||||
llama_model_loader: - type q6_K: 37 tensors
|
||||
print_info: file format = GGUF V3 (latest)
|
||||
print_info: file type = Q4_K - Medium
|
||||
print_info: file size = 4.68 GiB (4.90 BPW)
|
||||
load: printing all EOG tokens:
|
||||
load: - 151643 ('<|endoftext|>')
|
||||
load: - 151645 ('<|im_end|>')
|
||||
load: - 151662 ('<|fim_pad|>')
|
||||
load: - 151663 ('<|repo_name|>')
|
||||
load: - 151664 ('<|file_sep|>')
|
||||
load: special tokens cache size = 106
|
||||
load: token to piece cache size = 0.9319 MB
|
||||
print_info: arch = qwen3
|
||||
print_info: vocab_only = 0
|
||||
print_info: n_ctx_train = 40960
|
||||
print_info: n_embd = 4096
|
||||
print_info: n_layer = 36
|
||||
print_info: n_head = 32
|
||||
print_info: n_head_kv = 8
|
||||
print_info: n_rot = 128
|
||||
print_info: n_swa = 0
|
||||
print_info: is_swa_any = 0
|
||||
print_info: n_embd_head_k = 128
|
||||
print_info: n_embd_head_v = 128
|
||||
print_info: n_gqa = 4
|
||||
print_info: n_embd_k_gqa = 1024
|
||||
print_info: n_embd_v_gqa = 1024
|
||||
print_info: f_norm_eps = 0.0e+00
|
||||
print_info: f_norm_rms_eps = 1.0e-06
|
||||
print_info: f_clamp_kqv = 0.0e+00
|
||||
print_info: f_max_alibi_bias = 0.0e+00
|
||||
print_info: f_logit_scale = 0.0e+00
|
||||
print_info: f_attn_scale = 0.0e+00
|
||||
print_info: n_ff = 12288
|
||||
print_info: n_expert = 0
|
||||
print_info: n_expert_used = 0
|
||||
print_info: causal attn = 1
|
||||
print_info: pooling type = -1
|
||||
print_info: rope type = 2
|
||||
print_info: rope scaling = linear
|
||||
print_info: freq_base_train = 1000000.0
|
||||
print_info: freq_scale_train = 1
|
||||
print_info: n_ctx_orig_yarn = 40960
|
||||
print_info: rope_finetuned = unknown
|
||||
print_info: model type = 8B
|
||||
print_info: model params = 8.19 B
|
||||
print_info: general.name = Llm
|
||||
print_info: vocab type = BPE
|
||||
print_info: n_vocab = 151748
|
||||
print_info: n_merges = 151387
|
||||
print_info: BOS token = 151644 '<|im_start|>'
|
||||
print_info: EOS token = 151645 '<|im_end|>'
|
||||
print_info: EOT token = 151645 '<|im_end|>'
|
||||
print_info: UNK token = 128244 '<unk>'
|
||||
print_info: PAD token = 151643 '<|endoftext|>'
|
||||
print_info: LF token = 198 'Ċ'
|
||||
print_info: FIM PRE token = 151659 '<|fim_prefix|>'
|
||||
print_info: FIM SUF token = 151661 '<|fim_suffix|>'
|
||||
print_info: FIM MID token = 151660 '<|fim_middle|>'
|
||||
print_info: FIM PAD token = 151662 '<|fim_pad|>'
|
||||
print_info: FIM REP token = 151663 '<|repo_name|>'
|
||||
print_info: FIM SEP token = 151664 '<|file_sep|>'
|
||||
print_info: EOG token = 151643 '<|endoftext|>'
|
||||
print_info: EOG token = 151645 '<|im_end|>'
|
||||
print_info: EOG token = 151662 '<|fim_pad|>'
|
||||
print_info: EOG token = 151663 '<|repo_name|>'
|
||||
print_info: EOG token = 151664 '<|file_sep|>'
|
||||
print_info: max token length = 256
|
||||
load_tensors: loading model tensors, this can take a while... (mmap = true)
|
||||
load_tensors: CPU_REPACK model buffer size = 3199.50 MiB
|
||||
load_tensors: CPU_Mapped model buffer size = 4761.17 MiB
|
||||
.....................................................................................
|
||||
llama_context: constructing llama_context
|
||||
llama_context: n_seq_max = 1
|
||||
llama_context: n_ctx = 2048
|
||||
llama_context: n_ctx_per_seq = 2048
|
||||
llama_context: n_batch = 2048
|
||||
llama_context: n_ubatch = 512
|
||||
llama_context: causal_attn = 1
|
||||
llama_context: flash_attn = auto
|
||||
llama_context: kv_unified = false
|
||||
llama_context: freq_base = 1000000.0
|
||||
llama_context: freq_scale = 1
|
||||
llama_context: n_ctx_per_seq (2048) < n_ctx_train (40960) -- the full capacity of the model will not be utilized
|
||||
llama_context: CPU output buffer size = 0.58 MiB
|
||||
llama_kv_cache: CPU KV buffer size = 288.00 MiB
|
||||
llama_kv_cache: size = 288.00 MiB ( 2048 cells, 36 layers, 1/1 seqs), K (f16): 144.00 MiB, V (f16): 144.00 MiB
|
||||
llama_context: Flash Attention was auto, set to enabled
|
||||
llama_context: CPU compute buffer size = 304.38 MiB
|
||||
llama_context: graph nodes = 1267
|
||||
llama_context: graph splits = 1
|
||||
llama_model_loader: loaded meta data with 30 key-value pairs and 193 tensors from /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/tts/MiniCPM-o-4_5-tts-F16.gguf (version GGUF V3 (latest))
|
||||
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
|
||||
llama_model_loader: - kv 0: general.architecture str = llama
|
||||
llama_model_loader: - kv 1: general.type str = model
|
||||
llama_model_loader: - kv 2: general.name str = Tts
|
||||
llama_model_loader: - kv 3: general.size_label str = 445M
|
||||
llama_model_loader: - kv 4: llama.block_count u32 = 20
|
||||
llama_model_loader: - kv 5: llama.context_length u32 = 4096
|
||||
llama_model_loader: - kv 6: llama.embedding_length u32 = 768
|
||||
llama_model_loader: - kv 7: llama.feed_forward_length u32 = 3072
|
||||
llama_model_loader: - kv 8: llama.attention.head_count u32 = 12
|
||||
llama_model_loader: - kv 9: llama.attention.head_count_kv u32 = 12
|
||||
llama_model_loader: - kv 10: llama.rope.freq_base f32 = 10000.000000
|
||||
llama_model_loader: - kv 11: llama.attention.layer_norm_rms_epsilon f32 = 0.000001
|
||||
llama_model_loader: - kv 12: llama.attention.key_length u32 = 64
|
||||
llama_model_loader: - kv 13: llama.attention.value_length u32 = 64
|
||||
llama_model_loader: - kv 14: general.file_type u32 = 1
|
||||
llama_model_loader: - kv 15: llama.vocab_size u32 = 158626
|
||||
llama_model_loader: - kv 16: llama.rope.dimension_count u32 = 64
|
||||
llama_model_loader: - kv 17: general.quantization_version u32 = 2
|
||||
llama_model_loader: - kv 18: tokenizer.ggml.model str = gpt2
|
||||
llama_model_loader: - kv 19: tokenizer.ggml.pre str = qwen2
|
||||
llama_model_loader: - kv 20: tokenizer.ggml.tokens arr[str,158626] = ["!", "\"", "#", "$", "%", "&", "'", ...
|
||||
llama_model_loader: - kv 21: tokenizer.ggml.token_type arr[i32,158626] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
|
||||
llama_model_loader: - kv 22: tokenizer.ggml.merges arr[str,151387] = ["Ġ Ġ", "ĠĠ ĠĠ", "i n", "Ġ t",...
|
||||
llama_model_loader: - kv 23: tokenizer.ggml.bos_token_id u32 = 151644
|
||||
llama_model_loader: - kv 24: tokenizer.ggml.eos_token_id u32 = 151645
|
||||
llama_model_loader: - kv 25: tokenizer.ggml.unknown_token_id u32 = 128244
|
||||
llama_model_loader: - kv 26: tokenizer.ggml.padding_token_id u32 = 151643
|
||||
llama_model_loader: - kv 27: tokenizer.ggml.add_bos_token bool = false
|
||||
llama_model_loader: - kv 28: tokenizer.chat_template str = {%- if tools %}\n {{- '<|im_start|>...
|
||||
llama_model_loader: - kv 29: tokenizer.ggml.add_space_prefix bool = false
|
||||
llama_model_loader: - type f32: 50 tensors
|
||||
llama_model_loader: - type f16: 143 tensors
|
||||
print_info: file format = GGUF V3 (latest)
|
||||
print_info: file type = F16
|
||||
print_info: file size = 1.07 GiB (20.70 BPW)
|
||||
load: printing all EOG tokens:
|
||||
load: - 151643 ('<|endoftext|>')
|
||||
load: - 151645 ('<|im_end|>')
|
||||
load: - 151662 ('<|fim_pad|>')
|
||||
load: - 151663 ('<|repo_name|>')
|
||||
load: - 151664 ('<|file_sep|>')
|
||||
load: special tokens cache size = 106
|
||||
load: token to piece cache size = 0.9319 MB
|
||||
print_info: arch = llama
|
||||
print_info: vocab_only = 0
|
||||
print_info: n_ctx_train = 4096
|
||||
print_info: n_embd = 768
|
||||
print_info: n_layer = 20
|
||||
print_info: n_head = 12
|
||||
print_info: n_head_kv = 12
|
||||
print_info: n_rot = 64
|
||||
print_info: n_swa = 0
|
||||
print_info: is_swa_any = 0
|
||||
print_info: n_embd_head_k = 64
|
||||
print_info: n_embd_head_v = 64
|
||||
print_info: n_gqa = 1
|
||||
print_info: n_embd_k_gqa = 768
|
||||
print_info: n_embd_v_gqa = 768
|
||||
print_info: f_norm_eps = 0.0e+00
|
||||
print_info: f_norm_rms_eps = 1.0e-06
|
||||
print_info: f_clamp_kqv = 0.0e+00
|
||||
print_info: f_max_alibi_bias = 0.0e+00
|
||||
print_info: f_logit_scale = 0.0e+00
|
||||
print_info: f_attn_scale = 0.0e+00
|
||||
print_info: n_ff = 3072
|
||||
print_info: n_expert = 0
|
||||
print_info: n_expert_used = 0
|
||||
print_info: causal attn = 1
|
||||
print_info: pooling type = 0
|
||||
print_info: rope type = 0
|
||||
print_info: rope scaling = linear
|
||||
print_info: freq_base_train = 10000.0
|
||||
print_info: freq_scale_train = 1
|
||||
print_info: n_ctx_orig_yarn = 4096
|
||||
print_info: rope_finetuned = unknown
|
||||
print_info: model type = ?B
|
||||
print_info: model params = 444.94 M
|
||||
print_info: general.name = Tts
|
||||
print_info: vocab type = BPE
|
||||
print_info: n_vocab = 158626
|
||||
print_info: n_merges = 151387
|
||||
print_info: BOS token = 151644 '<|im_start|>'
|
||||
print_info: EOS token = 151645 '<|im_end|>'
|
||||
print_info: EOT token = 151645 '<|im_end|>'
|
||||
print_info: UNK token = 128244 '<unk>'
|
||||
print_info: PAD token = 151643 '<|endoftext|>'
|
||||
print_info: LF token = 198 'Ċ'
|
||||
print_info: FIM PRE token = 151659 '<|fim_prefix|>'
|
||||
print_info: FIM SUF token = 151661 '<|fim_suffix|>'
|
||||
print_info: FIM MID token = 151660 '<|fim_middle|>'
|
||||
print_info: FIM PAD token = 151662 '<|fim_pad|>'
|
||||
print_info: FIM REP token = 151663 '<|repo_name|>'
|
||||
print_info: FIM SEP token = 151664 '<|file_sep|>'
|
||||
print_info: EOG token = 151643 '<|endoftext|>'
|
||||
print_info: EOG token = 151645 '<|im_end|>'
|
||||
print_info: EOG token = 151662 '<|fim_pad|>'
|
||||
print_info: EOG token = 151663 '<|repo_name|>'
|
||||
print_info: EOG token = 151664 '<|file_sep|>'
|
||||
print_info: max token length = 256
|
||||
load_tensors: loading model tensors, this can take a while... (mmap = true)
|
||||
load_tensors: skipping TTS tensor emb_code.0.weight (size = 20158464 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor emb_text.weight (size = 467140608 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_semantic.linear1.weight (size = 12582912 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_semantic.linear1.bias (size = 3072 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_semantic.linear2.weight (size = 2359296 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_semantic.linear2.bias (size = 3072 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_spk.linear1.weight (size = 6291456 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_spk.linear1.bias (size = 3072 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_spk.linear2.weight (size = 1179648 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_spk.linear2.bias (size = 3072 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor head_code.0.weight (size = 20158464 bytes) -- will be loaded separately
|
||||
load_tensors: CPU_Mapped model buffer size = 592.48 MiB
|
||||
..............................................................
|
||||
llama_init_from_model: model default pooling_type is [0], but [-1] was specified
|
||||
llama_context: constructing llama_context
|
||||
llama_context: n_seq_max = 1
|
||||
llama_context: n_ctx = 2048
|
||||
llama_context: n_ctx_per_seq = 2048
|
||||
llama_context: n_batch = 2048
|
||||
llama_context: n_ubatch = 512
|
||||
llama_context: causal_attn = 1
|
||||
llama_context: flash_attn = auto
|
||||
llama_context: kv_unified = false
|
||||
llama_context: freq_base = 10000.0
|
||||
llama_context: freq_scale = 1
|
||||
llama_context: n_ctx_per_seq (2048) < n_ctx_train (4096) -- the full capacity of the model will not be utilized
|
||||
llama_context: CPU output buffer size = 0.61 MiB
|
||||
llama_kv_cache: CPU KV buffer size = 120.00 MiB
|
||||
llama_kv_cache: size = 120.00 MiB ( 2048 cells, 20 layers, 1/1 seqs), K (f16): 60.00 MiB, V (f16): 60.00 MiB
|
||||
llama_context: Flash Attention was auto, set to enabled
|
||||
llama_context: CPU compute buffer size = 25.51 MiB
|
||||
llama_context: graph nodes = 613
|
||||
llama_context: graph splits = 1
|
||||
vision_model_loader: model name:
|
||||
vision_model_loader: description: image encoder for MiniCPM-V
|
||||
vision_model_loader: GGUF version: 3
|
||||
vision_model_loader: alignment: 32
|
||||
vision_model_loader: n_tensors: 455
|
||||
vision_model_loader: n_kv: 20
|
||||
|
||||
vision_ctx: vision using CPU backend
|
||||
load_hparams: model_type: 0
|
||||
load_hparams: n_embd: 1152
|
||||
load_hparams: n_head: 16
|
||||
load_hparams: n_ff: 4304
|
||||
load_hparams: n_layer: 27
|
||||
load_hparams: ffn_op: gelu
|
||||
load_hparams: projection_dim: 0
|
||||
|
||||
--- vision hparams ---
|
||||
load_hparams: image_size: 448
|
||||
load_hparams: patch_size: 14
|
||||
load_hparams: minicpmv_version: 100045
|
||||
load_hparams: proj_scale_factor: 0
|
||||
load_hparams: n_wa_pattern: 0
|
||||
|
||||
load_hparams: model size: 1044.36 MiB
|
||||
load_hparams: metadata size: 0.16 MiB
|
||||
load_tensors: ffn up/down are swapped
|
||||
alloc_compute_meta: CPU compute buffer size = 100.30 MiB
|
||||
init tts....init t2w....voc_hg2_model: CPU backend using 8 threads
|
||||
audition_audio_preprocess: Decoded audio - sample_rate=16000, n_samples=32000
|
||||
audition_get_mel_filters: Retrieved mel filters from model: 80 mel bins x 201 fft bins
|
||||
audition_audio_preprocess: Using mel filters - n_mel=80, n_fft=201
|
||||
audition_audio_preprocess: Generated 1 mel spectrogram chunk(s)
|
||||
audition_audio_preprocess: Mel spectrogram ready - n_len=200, n_mel=80, total_size=16000
|
||||
build_whisper: Whisper encoder graph built (projector output, pre-pooling)
|
||||
audition_audio_batch_encode: Audio input data - n_step=200, n_mel=80, total_elements=16000
|
||||
audition_audio_batch_encode: Before incrementing iter: input_frames=200, n_tokens=100, current_iter=0, current_total=0, new_total=100, max_tokens=1500
|
||||
audition_audio_batch_encode: KV cache iter incremented to 1 (total_tokens=100, max_tokens=1500)
|
||||
audition_audio_batch_encode: Final output shape: [4096, 20]
|
||||
audition_audio_batch_encode: Final output: 20 tokens x 4096 dims
|
||||
=== Model Paths ===
|
||||
Base dir: /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf
|
||||
LLM: /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/MiniCPM-o-4_5-Q4_K_M.gguf [OK]
|
||||
Vision: /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/vision/MiniCPM-o-4_5-vision-F16.gguf [OK]
|
||||
Audio: /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/audio/MiniCPM-o-4_5-audio-F16.gguf [OK]
|
||||
TTS: /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/tts/MiniCPM-o-4_5-tts-F16.gguf [OK]
|
||||
Projector: /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/tts/MiniCPM-o-4_5-projector-F16.gguf [OK]
|
||||
===================
|
||||
=== Initializing Omni Context ===
|
||||
Media type: 2 (omni: audio+vision)
|
||||
TTS enabled: yes
|
||||
Context size: 2048
|
||||
GPU layers: 0
|
||||
Token2Wav device: cpu
|
||||
Vision backend: metal
|
||||
TTS bin dir: /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/tts
|
||||
Ref audio: tools/omni/assets/default_ref_audio/default_ref_audio.wav
|
||||
21:39:18.191 === omni_init start
|
||||
21:39:18.191 media_type = 2, duplex_mode = 0, base_output_dir = ./tools/omni/output
|
||||
21:39:18.191 === omni_init: loading new LLM model
|
||||
21:39:21.245 === omni_init: loading TTS model
|
||||
21:39:21.245 TTS model: loading with n_gpu_layers=0
|
||||
21:39:21.532 TTS sampler: temp=0.80, top_p=0.85, top_k=25, rep_penalty=1.05
|
||||
21:39:21.532 TTS: loading weights from GGUF (emb_code, emb_text, projector_semantic, head_code)...
|
||||
21:39:23.312 TTS: head_code shape: dim0=6562, dim1=768, will transpose to [6562, 768]
|
||||
21:39:23.335 TTS: head_code loaded, verifying first few values:
|
||||
21:39:23.335 head_code_weight[0] = 0.01361084 (expect ~0.01385498)
|
||||
21:39:23.335 head_code_weight[1] = -0.01660156 (expect ~-0.01647949)
|
||||
21:39:23.335 head_code_weight[768] = 0.04101562 (this is weight[1, 0], expect ~0.04150391)
|
||||
21:39:23.415 TTS: weights loaded successfully
|
||||
21:39:23.415 Projector: loading from /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/tts/MiniCPM-o-4_5-projector-F16.gguf
|
||||
21:39:23.427 Projector: loaded successfully
|
||||
21:39:23.428 === omni_init: loading APM model
|
||||
21:39:23.988 APM: init from /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/audio/MiniCPM-o-4_5-audio-F16.gguf
|
||||
21:39:24.952 Token2Wav: found models in /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/token2wav-gguf
|
||||
21:39:24.952 Token2Wav: all model files found, initializing session...
|
||||
21:39:24.952 Token2Wav: non-CUDA backend, vocoder using CPU for better performance
|
||||
21:39:24.952 Token2Wav: using prompt_cache from /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/token2wav-gguf/prompt_cache.gguf
|
||||
21:39:26.392 Token2Wav: initialized successfully
|
||||
21:39:26.392 Python T2W: script_dir=./tools/omni/pyt2w, model_dir=./tools/omni/pyt2w/token2wav
|
||||
21:39:26.392 Token2Wav: 使用 C++ 实现
|
||||
21:39:26.392 === omni_init success: ctx_llama = 0x5ca5bae08fe0
|
||||
=== Running test case ===
|
||||
Audio prefix: /home/zhout/project/edge_infer/scratch/minicpm_omni_case/fixture_
|
||||
Count: 2
|
||||
21:39:26.392 stream_prefill: n_past = 0
|
||||
voice_clone_prompt = <|im_start|>system
|
||||
模仿音频样本的音色并生成新的内容。
|
||||
<|audio_start|>
|
||||
assistant_prompt = <|audio_end|>你的任务是用这种声音模式来当一个助手。请认真、高质量地回复用户的问题。请用高自然度的方式和用户聊天。<|im_end|>
|
||||
<|im_start|>user
|
||||
|
||||
21:39:26.392 system prompt ref_audio: /home/zhout/project/edge_infer/scratch/minicpm_omni_case/fixture_0000.wav
|
||||
21:39:27.447 system prompt ref_audio embedding: n_pos=20
|
||||
21:39:29.020 🔒 n_keep 设置为 72 (system prompt tokens),这部分永远不会被滑动窗口删除
|
||||
21:39:29.020 stream_prefill(index=0): system prompt 初始化完成,ref_audio 已在其中 prefill
|
||||
21:39:29.020 [SW] system_prompt registered: preserve_length=72 (will be protected from sliding)
|
||||
21:39:29.020 n_past = 72
|
||||
21:39:29.020
|
||||
|
||||
c++ finish stream_prefill(index=0). n_past=72, n_keep=72, n_ctx=2048
|
||||
|
||||
prefill 0 (audio+vision) : 2.62814 s
|
||||
encode_image_with_vision_chunks: step 1 of 1 encoded in 3151.48 ms
|
||||
encode_image_with_vision_chunks: all 1 chunks encoded in 3173.11 ms (grid: 1x1)
|
||||
|
||||
encode_image_with_vision_chunks: image encoded in 3173.12 ms by vision ( 3173.12 ms per chunk, 64 total tokens)
|
||||
omni_image_embed_make_chunks_with_filename: created 1 vision chunks from /home/zhout/project/edge_infer/scratch/minicpm_omni_case/fixture_0001.jpg
|
||||
stream_prefill: prefilled 1 vision chunks (64 tokens each)
|
||||
audition_audio_preprocess: Decoded audio - sample_rate=16000, n_samples=32000
|
||||
audition_get_mel_filters: Retrieved mel filters from model: 80 mel bins x 201 fft bins
|
||||
audition_audio_preprocess: Using mel filters - n_mel=80, n_fft=201
|
||||
audition_audio_preprocess: Generated 1 mel spectrogram chunk(s)
|
||||
audition_audio_preprocess: Mel spectrogram ready - n_len=200, n_mel=80, total_size=16000
|
||||
build_whisper: Whisper encoder graph built (projector output, pre-pooling)
|
||||
audition_audio_batch_encode: Audio input data - n_step=200, n_mel=80, total_elements=16000
|
||||
audition_audio_batch_encode: Before incrementing iter: input_frames=200, n_tokens=100, current_iter=1, current_total=100, new_total=200, max_tokens=1500
|
||||
audition_audio_batch_encode: KV cache iter incremented to 2 (total_tokens=200, max_tokens=1500)
|
||||
audition_audio_batch_encode: Final output shape: [4096, 20]
|
||||
audition_audio_batch_encode: Final output: 20 tokens x 4096 dims
|
||||
21:39:34.011 stream_prefill(index=1): processing user audio: /home/zhout/project/edge_infer/scratch/minicpm_omni_case/fixture_0001.wav
|
||||
21:39:34.194 stream_prefill(index=1): user audio embedding: n_pos=20
|
||||
21:39:34.984
|
||||
|
||||
c++ finish stream_prefill(index=1). n_past=161, n_keep=72, n_ctx=2048
|
||||
|
||||
prefill 1 (audio+vision) : 5.96389 s
|
||||
21:39:34.984 📍 stream_decode 开始: n_past=161, n_keep=72, n_ctx=2048, duplex_mode=0
|
||||
21:39:34.984 stream_decode: create tts thread (simplex mode)
|
||||
21:39:34.985 stream_decode: create t2w thread
|
||||
21:39:34.985 wait prefill done
|
||||
21:39:34.985 📍 [单工TTS] 添加 assistant prompt: "<|im_end|>
|
||||
<|im_start|>assistant
|
||||
<think>
|
||||
|
||||
</think>
|
||||
|
||||
<|tts_bos|>", n_past=161
|
||||
21:39:34.985 T2W thread (C++) started
|
||||
<user>
|
||||
<assistant>21:39:34.988 TTS: 创建单工模式输出目录: ./tools/omni/output/round_000
|
||||
21:39:34.988 TTS thread started
|
||||
21:39:35.402 📍 [单工TTS] assistant prompt 完成, n_past=171
|
||||
21:39:35.403 LLM decode: max_tgt_len = 2048, n_predict = -1, n_ctx = 2048
|
||||
21:39:36.418 LLM->TTS: text='现在可以开始做很多事啦,比如整理', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[99601 73670 55286 99190 99555 29826 104060 3837 101912 104387]
|
||||
21:39:36.418 TTS<-LLM: chunk_idx=0, text='现在可以开始做很多事啦,比如整理', n_tokens=10, hidden_size=40960, token_ids=[99601 73670 55286 99190 99555 29826 104060 3837 101912 104387]
|
||||
21:39:36.418 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
21:39:36.418 TTS: before empty check - response.empty=0, response='现在可以开始做很多事啦,比如整理', llm_finish=0
|
||||
21:39:36.419 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
21:39:36.419 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
21:39:36.420 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
21:39:36.431 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_0/merged_embeddings.txt
|
||||
21:39:36.431 TTS Simplex: generating audio tokens for chunk 0 (n_tokens=10, tts_n_embd=768)
|
||||
21:39:36.431 TTS Simplex: 在 prefill 前添加 audio_bos (chunk_idx=0, new_size=11)
|
||||
21:39:36.431 TTS Simplex: first chunk - cleared KV cache
|
||||
21:39:36.431 TTS Simplex: first chunk - cleared tts_all_generated_tokens and tts_token_buffer
|
||||
21:39:36.466 TTS Simplex: prefill completed, n_past_tts=11
|
||||
21:39:36.466 TTS Simplex: sampler created
|
||||
21:39:36.466 TTS simplex: is_audio_bos=true (first audio token)
|
||||
21:39:36.499 TTS Simplex Phase1: token 1/500: rel_id=1490
|
||||
21:39:36.511 TTS Simplex Phase1: token 2/500: rel_id=4299
|
||||
21:39:36.522 TTS Simplex Phase1: token 3/500: rel_id=4299
|
||||
21:39:36.537 TTS Simplex Phase1: token 4/500: rel_id=4299
|
||||
21:39:36.550 TTS Simplex Phase1: token 5/500: rel_id=6081
|
||||
21:39:36.805 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 25, buffer=25)
|
||||
21:39:36.805 TTS Simplex Phase1: token 25/500: rel_id=5319
|
||||
21:39:36.805 T2W线程(C++): 轮次切换 (-1 -> 0),更新输出目录
|
||||
21:39:36.805 T2W线程(C++): 新输出目录 ./tools/omni/output/round_000/tts_wav
|
||||
21:39:37.134 TTS Simplex Phase1: EOS token at step 49
|
||||
21:39:37.134 TTS Simplex: chunk 结束,tts_token_buffer 剩余 23 tokens (保留等下一个 chunk)
|
||||
21:39:37.134 TTS Simplex: generated 48 audio tokens for chunk 0
|
||||
21:39:37.134 TTS Simplex: chunk 0 first tokens: [1490 4299 4299 4299 6081 ], last tokens: [5105 6077 5348 4628 1947 ]
|
||||
21:39:37.134 TTS Simplex: updated tts_n_past_accumulated=59, total_generated_tokens=48
|
||||
21:39:37.626 LLM->TTS: text='房间、学习新东西、锻炼身体,或者', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[102327 5373 100134 16628 100413 5373 104904 101099 3837 100631]
|
||||
21:39:37.626 TTS<-LLM: chunk_idx=1, text='房间、学习新东西、锻炼身体,或者', n_tokens=10, hidden_size=40960, token_ids=[102327 5373 100134 16628 100413 5373 104904 101099 3837 100631]
|
||||
21:39:37.626 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
21:39:37.626 TTS: before empty check - response.empty=0, response='房间、学习新东西、锻炼身体,或者', llm_finish=0
|
||||
21:39:37.626 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
21:39:37.626 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
21:39:37.627 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
21:39:37.640 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_1/merged_embeddings.txt
|
||||
21:39:37.641 TTS Simplex: generating audio tokens for chunk 1 (n_tokens=10, tts_n_embd=768)
|
||||
21:39:37.641 TTS Simplex: 在 prefill 前添加 audio_bos (chunk_idx=1, new_size=11)
|
||||
21:39:37.641 TTS Simplex: chunk 1 - keeping KV cache, n_past_tts=59
|
||||
21:39:37.662 TTS Simplex: prefill completed, n_past_tts=70
|
||||
21:39:37.662 TTS Simplex: sampler created
|
||||
21:39:37.675 TTS Simplex Phase1: token 1/500: rel_id=3645
|
||||
21:39:37.688 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 2, buffer=25)
|
||||
21:39:37.688 TTS Simplex Phase1: token 2/500: rel_id=5835
|
||||
21:39:37.703 TTS Simplex Phase1: token 3/500: rel_id=5838
|
||||
21:39:37.720 TTS Simplex Phase1: token 4/500: rel_id=1545
|
||||
21:39:37.735 TTS Simplex Phase1: token 5/500: rel_id=2112
|
||||
21:39:38.018 TTS Simplex Phase1: token 25/500: rel_id=4200
|
||||
21:39:38.047 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 27, buffer=25)
|
||||
21:39:38.400 TTS Simplex Phase1: token 50/500: rel_id=4677
|
||||
21:39:38.427 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 52, buffer=25)
|
||||
21:39:38.767 TTS Simplex Phase1: token 75/500: rel_id=2956
|
||||
21:39:38.787 TTS Simplex Phase1: EOS token at step 77
|
||||
21:39:38.787 TTS Simplex: chunk 结束,tts_token_buffer 剩余 24 tokens (保留等下一个 chunk)
|
||||
21:39:38.787 TTS Simplex: generated 76 audio tokens for chunk 1
|
||||
21:39:38.787 TTS Simplex: chunk 1 first tokens: [3645 5835 5838 1545 2112 ], last tokens: [747 2474 350 2956 5319 ]
|
||||
21:39:38.787 TTS Simplex: updated tts_n_past_accumulated=146, total_generated_tokens=124
|
||||
21:39:38.972 LLM->TTS: text='陪家人朋友聊聊天,感觉特别充实呢', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[100522 104271 99614 100281 105292 3837 100681 100654 108300 101036]
|
||||
21:39:38.973 TTS<-LLM: chunk_idx=2, text='陪家人朋友聊聊天,感觉特别充实呢', n_tokens=10, hidden_size=40960, token_ids=[100522 104271 99614 100281 105292 3837 100681 100654 108300 101036]
|
||||
21:39:38.973 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
21:39:38.973 TTS: before empty check - response.empty=0, response='陪家人朋友聊聊天,感觉特别充实呢', llm_finish=0
|
||||
21:39:38.973 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
21:39:38.973 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
21:39:38.973 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
21:39:38.990 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_2/merged_embeddings.txt
|
||||
21:39:38.990 TTS Simplex: generating audio tokens for chunk 2 (n_tokens=10, tts_n_embd=768)
|
||||
21:39:38.990 TTS Simplex: 在 prefill 前添加 audio_bos (chunk_idx=2, new_size=11)
|
||||
21:39:38.990 TTS Simplex: chunk 2 - keeping KV cache, n_past_tts=146
|
||||
21:39:39.014 TTS Simplex: prefill completed, n_past_tts=157
|
||||
21:39:39.014 TTS Simplex: sampler created
|
||||
21:39:39.033 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 1, buffer=25)
|
||||
21:39:39.034 TTS Simplex Phase1: token 1/500: rel_id=147
|
||||
21:39:39.055 TTS Simplex Phase1: token 2/500: rel_id=4486
|
||||
21:39:39.077 TTS Simplex Phase1: token 3/500: rel_id=5205
|
||||
21:39:39.091 TTS Simplex Phase1: token 4/500: rel_id=6261
|
||||
21:39:39.108 TTS Simplex Phase1: token 5/500: rel_id=2217
|
||||
21:39:39.282 LLM: detected end token, set llm_generation_done=true
|
||||
21:39:39.282 LLM->TTS: text='。', n_tokens=1, hidden_size=4096, n_embd=4096, token_ids=[1773]
|
||||
Waiting for audio generation to complete...
|
||||
21:39:39.282 📍 Decode 结束: n_past=203, 剩余空间=1845, 无需滑窗
|
||||
21:39:39.282 📍 轮次 1 结束,记录边界于 n_past=203
|
||||
21:39:39.440 TTS Simplex Phase1: token 25/500: rel_id=278
|
||||
21:39:39.456 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 26, buffer=25)
|
||||
21:39:39.675 📍 为下一轮准备: eval <|im_end|>\n<|im_start|>user\n, n_past=208
|
||||
21:39:39.825 TTS Simplex Phase1: token 50/500: rel_id=4564
|
||||
21:39:39.840 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 51, buffer=25)
|
||||
21:39:40.084 TTS Simplex Phase1: EOS token at step 72
|
||||
21:39:40.084 TTS Simplex: chunk 结束,tts_token_buffer 剩余 20 tokens (保留等下一个 chunk)
|
||||
21:39:40.084 TTS Simplex: generated 71 audio tokens for chunk 2
|
||||
21:39:40.084 TTS Simplex: chunk 2 first tokens: [147 4486 5205 6261 2217 ], last tokens: [734 1806 5568 1943 140 ]
|
||||
21:39:40.084 TTS Simplex: updated tts_n_past_accumulated=228, total_generated_tokens=195
|
||||
21:39:40.084 TTS<-LLM: chunk_idx=3, text='。', n_tokens=1, hidden_size=4096, token_ids=[1773]
|
||||
21:39:40.084 TTS: after queue pop - speek_done=0, llm_finish=1, llm_text.empty=0, token_ids.size=1
|
||||
21:39:40.084 TTS: before empty check - response.empty=0, response='。', llm_finish=1
|
||||
[timing] call=0 tokens=28 final=0 token2mel=3206.482ms vocoder=368.622ms total=3575.116ms audio=20160
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_0.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_1.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_2.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_3.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_4.wav does not exist or is empty
|
||||
TTS: no valid WAV files to merge
|
||||
[timing] call=1 tokens=28 final=0 token2mel=1726.083ms vocoder=316.361ms total=2042.460ms audio=24000
|
||||
[timing] call=2 tokens=28 final=0 token2mel=1677.117ms vocoder=315.853ms total=1992.984ms audio=24000
|
||||
[timing] call=3 tokens=28 final=0 token2mel=1678.513ms vocoder=310.617ms total=1989.141ms audio=24000
|
||||
[timing] call=4 tokens=28 final=0 token2mel=1688.458ms vocoder=306.011ms total=1994.479ms audio=24000
|
||||
[timing] call=5 tokens=28 final=0 token2mel=1684.994ms vocoder=313.801ms total=1998.805ms audio=24000
|
||||
[timing] call=6 tokens=28 final=0 token2mel=1695.620ms vocoder=323.250ms total=2018.882ms audio=24000
|
||||
[timing] call=7 tokens=28 final=0 token2mel=1678.254ms vocoder=323.110ms total=2001.377ms audio=24000
|
||||
[timing] call=8 tokens=28 final=0 token2mel=1699.355ms vocoder=314.693ms total=2014.060ms audio=24000
|
||||
[timing] call=9 tokens=6 final=1 token2mel=1666.595ms vocoder=127.808ms total=1794.419ms audio=9600
|
||||
Audio generation completed.
|
||||
21:39:40.084 TTS: DEBUG before has_llm_data - token_ids.size=1, hidden_states.size=4096, n_embd=4096
|
||||
21:39:40.084 TTS: has_llm_data=1, token_ids=1, hidden_states=4096, n_embd=4096, llm_finish=1
|
||||
21:39:40.084 TTS: n_tokens_orig=1, n_tokens_filtered=1 (filtered 0 special tokens)
|
||||
21:39:40.088 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_3/merged_embeddings.txt
|
||||
21:39:40.088 TTS Simplex: generating audio tokens for chunk 3 (n_tokens=1, tts_n_embd=768)
|
||||
21:39:40.088 TTS Simplex: 在 prefill 前添加 audio_bos (chunk_idx=3, new_size=2)
|
||||
21:39:40.088 TTS Simplex: chunk 3 - keeping KV cache, n_past_tts=228
|
||||
21:39:40.099 TTS Simplex: prefill completed, n_past_tts=230
|
||||
21:39:40.099 TTS Simplex: sampler created
|
||||
21:39:40.112 TTS Simplex Phase1: token 1/500: rel_id=147
|
||||
21:39:40.126 TTS Simplex Phase1: token 2/500: rel_id=27
|
||||
21:39:40.140 TTS Simplex Phase1: token 3/500: rel_id=2997
|
||||
21:39:40.155 TTS Simplex Phase1: token 4/500: rel_id=4716
|
||||
21:39:40.169 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 5, buffer=25)
|
||||
21:39:40.169 TTS Simplex Phase1: token 5/500: rel_id=4842
|
||||
21:39:40.257 TTS Simplex Phase1: EOS token at step 12
|
||||
21:39:40.257 TTS Simplex: is_final_text_chunk=true, will enter Phase 2 for text_eos_embed
|
||||
21:39:40.257 TTS Simplex Phase2: injecting text_eos_embed + audio_bos at n_past=241
|
||||
21:39:40.268 TTS Simplex Phase2: text_eos_embed injected, n_past=242
|
||||
21:39:40.277 TTS Simplex Phase2: audio_bos injected, n_past=243, starting final generation
|
||||
21:39:40.380 🎉 首响时间 (First Audio Response): 5396ms
|
||||
21:39:40.380 T2W线程: wav_0.wav | 0.84s audio | 3575.2ms inference | RTF=4.26 | t=5396ms
|
||||
21:39:40.510 TTS Simplex Phase2: yield 25 tokens 到 T2W
|
||||
21:39:40.556 TTS Simplex Phase2: EOS at step 23 (final end)
|
||||
21:39:40.556 TTS Simplex: chunk 结束,tts_token_buffer 剩余 3 tokens (保留等下一个 chunk)
|
||||
21:39:40.556 TTS Simplex: is_final_text_chunk=true, flush 剩余 3 tokens 从 tts_token_buffer
|
||||
21:39:40.556 TTS Simplex: generated 33 audio tokens for chunk 3
|
||||
21:39:40.556 TTS Simplex: chunk 3 first tokens: [147 27 2997 4716 4842 ], last tokens: [4299 4218 4299 4299 6082 ]
|
||||
21:39:40.556 TTS Simplex: updated tts_n_past_accumulated=266, total_generated_tokens=228
|
||||
21:39:40.556 TTS: finished processing all chunks
|
||||
21:39:40.556 TTS: 单工模式轮次结束,下一轮 round_idx=1
|
||||
21:39:40.557 TTS: sent is_final=true to T2W queue (turn end)
|
||||
21:39:42.423 T2W线程: wav_1.wav | 1.00s audio | 2042.5ms inference | RTF=2.04 | t=7438ms
|
||||
21:39:44.417 T2W线程: wav_2.wav | 1.00s audio | 1993.1ms inference | RTF=1.99 | t=9432ms
|
||||
21:39:46.406 T2W线程: wav_3.wav | 1.00s audio | 1989.2ms inference | RTF=1.99 | t=11421ms
|
||||
21:39:48.401 T2W线程: wav_4.wav | 1.00s audio | 1994.6ms inference | RTF=1.99 | t=13416ms
|
||||
21:39:50.400 T2W线程: wav_5.wav | 1.00s audio | 1998.9ms inference | RTF=2.00 | t=15415ms
|
||||
21:39:52.419 T2W线程: wav_6.wav | 1.00s audio | 2019.0ms inference | RTF=2.02 | t=17434ms
|
||||
21:39:54.421 T2W线程: wav_7.wav | 1.00s audio | 2001.5ms inference | RTF=2.00 | t=19436ms
|
||||
21:39:56.435 T2W线程: wav_8.wav | 1.00s audio | 2014.1ms inference | RTF=2.01 | t=21451ms
|
||||
21:39:58.230 T2W线程: wav_9.wav | 0.40s audio | 1794.5ms inference | RTF=4.49 | t=23245ms
|
||||
21:39:58.230 T2W线程: 写入结束标记 ./tools/omni/output/round_000/tts_wav/generation_done.flag (last_wav=9)
|
||||
21:39:58.230 T2W线程: 轮次结束后更新输出目录为 ./tools/omni/output/round_001/tts_wav
|
||||
21:39:58.312 omni_stop_threads: stop signals sent
|
||||
21:39:58.312 T2W(C++) 线程: 停止
|
||||
llama_perf_context_print: load time = 17210.64 ms
|
||||
llama_perf_context_print: prompt eval time = 9009.99 ms / 171 tokens ( 52.69 ms per token, 18.98 tokens per second)
|
||||
llama_perf_context_print: eval time = 3867.69 ms / 32 runs ( 120.87 ms per token, 8.27 tokens per second)
|
||||
llama_perf_context_print: total time = 40120.64 ms / 203 tokens
|
||||
llama_perf_context_print: graphs reused = 33
|
||||
Token2Wav (C++): session released
|
||||
tts thread end
|
||||
t2w thread end
|
||||
Command being timed: "./build-cpu/bin/llama-omni-cli -m /home/zhout/project/edge_infer/models/MiniCPM-o-4_5-gguf/MiniCPM-o-4_5-Q4_K_M.gguf -ngl 0 -c 2048 --omni --t2w-device cpu --test /home/zhout/project/edge_infer/scratch/minicpm_omni_case/fixture_ 2"
|
||||
User time (seconds): 109.54
|
||||
System time (seconds): 8.79
|
||||
Percent of CPU this job got: 290%
|
||||
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:40.70
|
||||
Average shared text size (kbytes): 0
|
||||
Average unshared data size (kbytes): 0
|
||||
Average stack size (kbytes): 0
|
||||
Average total size (kbytes): 0
|
||||
Maximum resident set size (kbytes): 13369604
|
||||
Average resident set size (kbytes): 0
|
||||
Major (requiring I/O) page faults: 0
|
||||
Minor (reclaiming a frame) page faults: 2376316
|
||||
Voluntary context switches: 1129
|
||||
Involuntary context switches: 151
|
||||
Swaps: 0
|
||||
File system inputs: 1217296
|
||||
File system outputs: 6528
|
||||
Socket messages sent: 0
|
||||
Socket messages received: 0
|
||||
Signals delivered: 0
|
||||
Page size (bytes): 4096
|
||||
Exit status: 0
|
||||
BIN
Binary file not shown.
+113
@@ -0,0 +1,113 @@
|
||||
{
|
||||
"scope": "standalone MiniCPM-o 4.5 GGUF audio+image input to text+speech on WSL CPU",
|
||||
"status": "scoped_complete_path_pass",
|
||||
"quality": "synthetic red-square/tone response not established as semantically correct",
|
||||
"model_revision": "db25077c33951fe163b42986fba0132e279872a2",
|
||||
"artifacts": {
|
||||
"MiniCPM-o-4_5-Q4_K_M.gguf": {
|
||||
"bytes": 5026714400,
|
||||
"sha256": "1237a97ee081b8abebc47aa7dad565701e8f5f904cdc92f6723ac4281bbc0932"
|
||||
},
|
||||
"audio/MiniCPM-o-4_5-audio-F16.gguf": {
|
||||
"bytes": 660167904,
|
||||
"sha256": "d5b188ac7feaf98e17175c3f9bd14bf269301bfd187439fdaa3e3a494fc32ef7"
|
||||
},
|
||||
"vision/MiniCPM-o-4_5-vision-F16.gguf": {
|
||||
"bytes": 1095113184,
|
||||
"sha256": "1453678cc4e4fe18de241952962e234f265cb8dda780773526103ab8ba82f421"
|
||||
},
|
||||
"tts/MiniCPM-o-4_5-tts-F16.gguf": {
|
||||
"bytes": 1157244416,
|
||||
"sha256": "c7be3748a863dd6966ae7eed42600b7f41ca67affb03729ff245247f0e5ea088"
|
||||
},
|
||||
"tts/MiniCPM-o-4_5-projector-F16.gguf": {
|
||||
"bytes": 14948640,
|
||||
"sha256": "4b1b5b377358a5e594a304ff6ea5d52df606a9ba7d886c4299d232f0c67dd1fd"
|
||||
},
|
||||
"token2wav-gguf/encoder.gguf": {
|
||||
"bytes": 151339008,
|
||||
"sha256": "7f8d265da594eaf5e1de2db8f5f1867dbcb0bb75ef5878fadf2952347116f4d0"
|
||||
},
|
||||
"token2wav-gguf/flow_matching.gguf": {
|
||||
"bytes": 458250240,
|
||||
"sha256": "eda6069f3edeb5dd3a87fbf2aedb2ddd1b46f3273926c4fcf09b24476a39cab8"
|
||||
},
|
||||
"token2wav-gguf/flow_extra.gguf": {
|
||||
"bytes": 13663328,
|
||||
"sha256": "c67611aa7d02500fe395a7798bf0bfdfb55c74d37ba93934ca74d82b4e63f78d"
|
||||
},
|
||||
"token2wav-gguf/hifigan2.gguf": {
|
||||
"bytes": 83242816,
|
||||
"sha256": "1b8b3bf5d8d3066aeee4324fdcdd41aefce170d0ee907645858de408d82835c2"
|
||||
},
|
||||
"token2wav-gguf/prompt_cache.gguf": {
|
||||
"bytes": 211613152,
|
||||
"sha256": "81fe6f541ebe0b67db06a1e395df928da47991dc9637c2cf47d6c59d5b979f2c"
|
||||
}
|
||||
},
|
||||
"runtime_binary_sha256": "704ada01b2ac3378feca3201bcb303f17ce038cc447f7ef816f2bad67fe97111",
|
||||
"input_image_sha256": "22c7ccea466a3f551c512045e6316c7597408d4e0a20205502f55784d977aa8d",
|
||||
"input_audio_sha256": "cf4bb5cd9acbfbf67596d4a53310652b61ef4b7ede1d54eb03ef4882ca40223a",
|
||||
"response_text": "现在可以开始做很多事啦,比如整理房间、学习新东西、锻炼身体,或者陪家人朋友聊聊天,感觉特别充实呢。",
|
||||
"audio_chunks": [
|
||||
{
|
||||
"name": "wav_0.wav",
|
||||
"frames": 20160,
|
||||
"sha256": "1534770fa94ce4b9d928e76bcb3122793b0176d324a0fe2909d67de9d40058ab"
|
||||
},
|
||||
{
|
||||
"name": "wav_1.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "e49899651f34eae9cfd86ceb01820f246e0122127cd6f9f27f9547b72509b622"
|
||||
},
|
||||
{
|
||||
"name": "wav_2.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "a840c7e90b75f863b82091f7bd35c8dc87d2fdfe4f35b08de4b9a4be7917c03a"
|
||||
},
|
||||
{
|
||||
"name": "wav_3.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "5a304eeb2bfa3ae0e35ce57b370611586355a2ffa54afff07300a13a6d0881ee"
|
||||
},
|
||||
{
|
||||
"name": "wav_4.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "2a65cc741567ad722d1d553c4152b2fd24de62ae7aebe90ab12b7ccf4168952f"
|
||||
},
|
||||
{
|
||||
"name": "wav_5.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "2511ac60178cddf297b1be35db3e6c9becec0cd805438feadf271a316f97a61c"
|
||||
},
|
||||
{
|
||||
"name": "wav_6.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "c21ae914f1178e06c3d89a923b342df59e091dc587b128cd93d102f67dbc1d50"
|
||||
},
|
||||
{
|
||||
"name": "wav_7.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "0787df952fd371586f098a2ca6e987bbe90b1dfcd3f9342ffe8b70b737f4cd31"
|
||||
},
|
||||
{
|
||||
"name": "wav_8.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "08cccd338df55f8ae457d790f8199055fe600c38984be956ec7152432630071b"
|
||||
},
|
||||
{
|
||||
"name": "wav_9.wav",
|
||||
"frames": 9600,
|
||||
"sha256": "4a4daba84c2bd339fba945bb1175a91e71ab2c6aae2c717b13989bf4ab93a461"
|
||||
}
|
||||
],
|
||||
"audio_frames": 221760,
|
||||
"audio_duration_s": 9.24,
|
||||
"audio_rms_pcm16": 2452.440876561615,
|
||||
"pcm_sha256": "372c4c7b453849eb1843b0477ce74d5db04a46cacc663ef01d02698f34a1a158",
|
||||
"merged_wav_sha256": "7b8073169b1561905e539bfa0807cbfad7b59636d603c58c716cec2e76c33154",
|
||||
"peak_rss_kib_from_time": 13369604,
|
||||
"wall_clock_from_time": "0:40.70",
|
||||
"sampled_process_profile": null,
|
||||
"upstream_merge_name_mismatch": true
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
现在可以开始做很多事啦,比如整理
|
||||
+1
@@ -0,0 +1 @@
|
||||
房间、学习新东西、锻炼身体,或者
|
||||
+1
@@ -0,0 +1 @@
|
||||
陪家人朋友聊聊天,感觉特别充实呢
|
||||
+1
@@ -0,0 +1 @@
|
||||
。
|
||||
+1
@@ -0,0 +1 @@
|
||||
9
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+3
@@ -0,0 +1,3 @@
|
||||
# WAV file generation timing log
|
||||
# Format: chunk_index, elapsed_time_ms (since stream_decode start), file_size_bytes, request_duration_ms
|
||||
# Time 0 is when stream_decode() function starts
|
||||
+1
@@ -0,0 +1 @@
|
||||
现在可以开始做很多事啦,比如整理房间、学习新东西、锻炼身体,或者陪家人朋友聊聊天,感觉特别充实呢。
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"scope": "Whisper Mandarin ASR proxy for generated speech; no input-task or perceptual-quality claim",
|
||||
"asr_model": "openai/whisper-tiny",
|
||||
"asr_revision": "169d4a4341b33bc18d8881c4b69c2e104e1cc0af",
|
||||
"asr_weights_sha256": "7ebd0e69e78190ffe1438491fa05cc1f5c1aa3a4c4db3bc1723adbb551ea2395",
|
||||
"transformers": "4.57.3",
|
||||
"torch": "2.4.1+cpu",
|
||||
"wav_sha256": "7b8073169b1561905e539bfa0807cbfad7b59636d603c58c716cec2e76c33154",
|
||||
"wav_duration_s": 9.24,
|
||||
"reference_text": "现在可以开始做很多事啦,比如整理房间、学习新东西、锻炼身体,或者陪家人朋友聊聊天,感觉特别充实呢。",
|
||||
"transcript": "現在可以開始做很多事啦比如整理房間,學習新東西,斷領身體或者陪家人朋友聊天感覺特別充實啦",
|
||||
"asr_segments_25_s": 1,
|
||||
"character_error_rate_raw": 0.32558139534883723,
|
||||
"character_error_rate_t2s_normalized": 0.09302325581395349,
|
||||
"normalization": "OpenCC 0.1.7 t2s; punctuation ignored",
|
||||
"load_s": 0.6843268999364227,
|
||||
"inference_s": 1.35040409991052
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"scope": "Whisper Mandarin ASR proxy for generated speech; no input-task or perceptual-quality claim",
|
||||
"asr_model": "openai/whisper-tiny",
|
||||
"asr_revision": "169d4a4341b33bc18d8881c4b69c2e104e1cc0af",
|
||||
"asr_weights_sha256": "7ebd0e69e78190ffe1438491fa05cc1f5c1aa3a4c4db3bc1723adbb551ea2395",
|
||||
"transformers": "4.57.3",
|
||||
"torch": "2.4.1+cpu",
|
||||
"wav_sha256": "7b8073169b1561905e539bfa0807cbfad7b59636d603c58c716cec2e76c33154",
|
||||
"wav_duration_s": 9.24,
|
||||
"reference_text": "���ڿ��Կ�ʼ���ܶ������������������䡢ѧϰ�¶������������壬������������������죬�о��ر��ʵ�ء�",
|
||||
"transcript": "�F�ڿ����_ʼ���ܶ����������������g,�W���|��,���I���w�������������������X�e�䌍��",
|
||||
"asr_segments_25_s": 1,
|
||||
"character_error_rate_raw": 0.32558139534883723,
|
||||
"character_error_rate_t2s_normalized": 0.09302325581395349,
|
||||
"normalization": "OpenCC 0.1.7 t2s; punctuation ignored",
|
||||
"load_s": 0.6843268999364227,
|
||||
"inference_s": 1.35040409991052
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Native Windows CPU MiniCPM-o 4.5 GGUF scoped complete path
|
||||
|
||||
On Windows 11 build 26200, the Ryzen AI 9 HX 370 CPU ran one **standalone** combined synthetic JPEG+16 kHz WAV input through MiniCPM-o language/vision/audio/TTS/Token2Wav to nonempty text and complete speech. This is a scoped functional path (P for this fixture), not an Omni StageRuntime/StagePool integration, an AMD Radeon/NPU result, or a semantic-quality qualification. Native Windows vLLM CPU attention operators remain unavailable in the installed wheel; this C++ backend is a separate route.
|
||||
|
||||
The complete ten-file Q4_K_M/F16 set is [openbmb/MiniCPM-o-4_5-gguf](https://huggingface.co/openbmb/MiniCPM-o-4_5-gguf/tree/db25077c33951fe163b42986fba0132e279872a2) revision `db25077c33951fe163b42986fba0132e279872a2`. The C++ source is [tc-mb/llama.cpp-omni](https://github.com/tc-mb/llama.cpp-omni/tree/5202b7b2f4d11f50b9f996161e7a2f8b8571b890) at `5202b7b2f4d11f50b9f996161e7a2f8b8571b890`, cross-built with MinGW-w64 GCC 13-posix, x86-64-v3, CMake/Ninja Release, CUDA/Vulkan/OpenMP off and [this patch](../minicpmo_cpp_cpu/llama_cpp_omni_cpu.patch). The patch adds explicit CPU Token2Wav selection, portable Windows compatibility and a configurable bounded wait that reports failure if speech is incomplete. [The verification report](full_report.json) pins all ten Windows-copy GGUF byte counts and SHA256 hashes and the exact executable hash; the files match the [WSL-copy report](../minicpmo_cpp_cpu/minicpm_omni_cpu_full_report.json). The GGUF weights and executable remain outside Git.
|
||||
|
||||
| Observation | Raw evidence |
|
||||
|---|---|
|
||||
| The log reports zero GPU layers, CPU vision and CPU Token2Wav/vocoder placement. Index 0 supplied the system/reference-audio prompt; index 1 actually passed a 448×448 red-square JPEG and 2 s/440 Hz tone through image and audio prefill. | [combined log](full.combined.log), [image](fixture_0001.jpg), [tone](fixture_0001.wav), [reference tone](fixture_0000.wav) |
|
||||
| The decoder returned [nonempty text](response_text.txt); the audio completion marker was present. The verifier found 50 gap-free, nonzero mono 24 kHz PCM16 [WAV chunks](round_000/tts_wav/), 1,179,840 total frames/49.16 s, RMS 2,572.52 PCM16, and assembled their original PCM into a [single WAV](full_merged.wav). | [verification report](full_report.json), [raw chunks](round_000/tts_wav/), [debug text](round_000/llm_debug/) |
|
||||
| One cold process took 137.34 s. At 100 ms intervals, maximum sampled RSS/private bytes were 13.10/13.31 GB; these are observed maxima, not proven loading peaks. The 49.16 s speech took longer than real time. This is one observation, with no warmup distribution. | [process profile](full.profile.json), [raw timing/stderr](full.stderr.log) |
|
||||
| Pinned CPU `openai/whisper-tiny` recognized the generated Mandarin speech with 13.59% CJK/alphanumeric character error against the model's **own** text after OpenCC traditional-to-simplified normalization (25.24% before normalization), across two 25 s ASR windows. This is only an intelligibility proxy. | [ASR report](speech_asr_proxy.json), [ASR log](speech_asr_proxy.log), [probe](../../../../experiments/probe_tts_asr_cjk.py) |
|
||||
|
||||
The response was a generic story about visiting the Arctic rather than a description of the square or tone. The CLI fixture did not supply an explicit describe-the-input instruction, so this observation cannot establish grounded task quality. The runtime's optional merger still looked for `tts_output_chunk_N.wav` while the vocoder wrote `wav_N.wav`, and it attempted merging before all audio was ready. [The verifier](../../../../experiments/verify_minicpm_cpp_output.py) assembled the original PCM only after checking the completion flag and all chunks; this does not provide live playable streaming. The [first native attempt](../minicpmo_cpp_windows_cpu_attempt1/README.md) exited 0 with partial audio because of a 120 s wait; it is retained as a failed run. Omni admission/state/cancellation, real image/audio quality, repeat latency, loading peak and sustained power/thermal behavior remain open.
|
||||
|
||||
Reproduce from the pinned C++ checkout after applying the patch and obtaining the pinned GGUF set. Cross-build using `-DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_PROCESSOR=x86_64`, MinGW-w64 `gcc-posix/g++-posix`, `-DCMAKE_C_FLAGS=-march=x86-64-v3 -DCMAKE_CXX_FLAGS=-march=x86-64-v3`, `-DGGML_CUDA=OFF -DGGML_VULKAN=OFF -DGGML_OPENMP=OFF -DLLAMA_CURL=OFF -DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=ON`, then build `llama-omni-cli`. The native run used:
|
||||
|
||||
```powershell
|
||||
llama-omni-cli.exe -m C:\path\to\MiniCPM-o-4_5-Q4_K_M.gguf `
|
||||
-ngl 0 -c 2048 --omni --t2w-device cpu --t2w-wait-seconds 900 `
|
||||
--ref-audio C:\path\to\default_ref_audio.wav --test C:\path\to\fixture_ 2
|
||||
```
|
||||
|
||||
The fixture requires `fixture_0000.wav` for the reference/system prompt and `fixture_0001.wav` plus `fixture_0001.jpg` for the user index. The result is a single cold run; no p50/p95 is implied.
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
|
After Width: | Height: | Size: 5.7 KiB |
BIN
Binary file not shown.
+1055
File diff suppressed because it is too large.
Load diff
+29
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"command": [
|
||||
"C:\\Users\\zhout\\w2\\minicpmo_cpp_cpu_v3\\llama-omni-cli.exe",
|
||||
"-m",
|
||||
"C:\\Users\\zhout\\w2\\models\\MiniCPM-o-4_5-gguf\\MiniCPM-o-4_5-Q4_K_M.gguf",
|
||||
"-ngl",
|
||||
"0",
|
||||
"-c",
|
||||
"2048",
|
||||
"--omni",
|
||||
"--t2w-device",
|
||||
"cpu",
|
||||
"--t2w-wait-seconds",
|
||||
"900",
|
||||
"--ref-audio",
|
||||
"C:\\Users\\zhout\\w2\\minicpmo_cpp_cpu_v3\\default_ref_audio.wav",
|
||||
"--test",
|
||||
"C:\\Users\\zhout\\w2\\minicpmo_cpp_cpu_v3\\fixture_",
|
||||
"2"
|
||||
],
|
||||
"cwd": "C:\\Users\\zhout\\w2\\minicpmo_cpp_cpu_v3",
|
||||
"exit_code": 0,
|
||||
"wall_s": 137.33765170001425,
|
||||
"memory_sample_interval_ms": 100,
|
||||
"memory_samples": 1365,
|
||||
"peak_sampled_rss_bytes": 13104742400,
|
||||
"peak_sampled_private_bytes": 13314060288,
|
||||
"measurement_note": "sampled process values, not guaranteed loading peaks"
|
||||
}
|
||||
+393
@@ -0,0 +1,393 @@
|
||||
build: 64 (5202b7b) with x86_64-w64-mingw32-gcc-posix (GCC) 13-posix for x86_64-w64-mingw32
|
||||
llama_model_loader: loaded meta data with 27 key-value pairs and 399 tensors from C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf\MiniCPM-o-4_5-Q4_K_M.gguf (version GGUF V3 (latest))
|
||||
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
|
||||
llama_model_loader: - kv 0: general.architecture str = qwen3
|
||||
llama_model_loader: - kv 1: general.type str = model
|
||||
llama_model_loader: - kv 2: general.name str = Llm
|
||||
llama_model_loader: - kv 3: general.size_label str = 8.2B
|
||||
llama_model_loader: - kv 4: qwen3.block_count u32 = 36
|
||||
llama_model_loader: - kv 5: qwen3.context_length u32 = 40960
|
||||
llama_model_loader: - kv 6: qwen3.embedding_length u32 = 4096
|
||||
llama_model_loader: - kv 7: qwen3.feed_forward_length u32 = 12288
|
||||
llama_model_loader: - kv 8: qwen3.attention.head_count u32 = 32
|
||||
llama_model_loader: - kv 9: qwen3.attention.head_count_kv u32 = 8
|
||||
llama_model_loader: - kv 10: qwen3.rope.freq_base f32 = 1000000.000000
|
||||
llama_model_loader: - kv 11: qwen3.attention.layer_norm_rms_epsilon f32 = 0.000001
|
||||
llama_model_loader: - kv 12: qwen3.attention.key_length u32 = 128
|
||||
llama_model_loader: - kv 13: qwen3.attention.value_length u32 = 128
|
||||
llama_model_loader: - kv 14: tokenizer.ggml.model str = gpt2
|
||||
llama_model_loader: - kv 15: tokenizer.ggml.pre str = qwen2
|
||||
llama_model_loader: - kv 16: tokenizer.ggml.tokens arr[str,151748] = ["!", "\"", "#", "$", "%", "&", "'", ...
|
||||
llama_model_loader: - kv 17: tokenizer.ggml.token_type arr[i32,151748] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
|
||||
llama_model_loader: - kv 18: tokenizer.ggml.merges arr[str,151387] = ["Ġ Ġ", "ĠĠ ĠĠ", "i n", "Ġ t",...
|
||||
llama_model_loader: - kv 19: tokenizer.ggml.bos_token_id u32 = 151644
|
||||
llama_model_loader: - kv 20: tokenizer.ggml.eos_token_id u32 = 151645
|
||||
llama_model_loader: - kv 21: tokenizer.ggml.unknown_token_id u32 = 128244
|
||||
llama_model_loader: - kv 22: tokenizer.ggml.padding_token_id u32 = 151643
|
||||
llama_model_loader: - kv 23: tokenizer.ggml.add_bos_token bool = false
|
||||
llama_model_loader: - kv 24: tokenizer.chat_template str = {%- if tools %}\n {{- '<|im_start|>...
|
||||
llama_model_loader: - kv 25: general.quantization_version u32 = 2
|
||||
llama_model_loader: - kv 26: general.file_type u32 = 15
|
||||
llama_model_loader: - type f32: 145 tensors
|
||||
llama_model_loader: - type q4_K: 217 tensors
|
||||
llama_model_loader: - type q6_K: 37 tensors
|
||||
print_info: file format = GGUF V3 (latest)
|
||||
print_info: file type = Q4_K - Medium
|
||||
print_info: file size = 4.68 GiB (4.90 BPW)
|
||||
load: printing all EOG tokens:
|
||||
load: - 151643 ('<|endoftext|>')
|
||||
load: - 151645 ('<|im_end|>')
|
||||
load: - 151662 ('<|fim_pad|>')
|
||||
load: - 151663 ('<|repo_name|>')
|
||||
load: - 151664 ('<|file_sep|>')
|
||||
load: special tokens cache size = 106
|
||||
load: token to piece cache size = 0.9319 MB
|
||||
print_info: arch = qwen3
|
||||
print_info: vocab_only = 0
|
||||
print_info: n_ctx_train = 40960
|
||||
print_info: n_embd = 4096
|
||||
print_info: n_layer = 36
|
||||
print_info: n_head = 32
|
||||
print_info: n_head_kv = 8
|
||||
print_info: n_rot = 128
|
||||
print_info: n_swa = 0
|
||||
print_info: is_swa_any = 0
|
||||
print_info: n_embd_head_k = 128
|
||||
print_info: n_embd_head_v = 128
|
||||
print_info: n_gqa = 4
|
||||
print_info: n_embd_k_gqa = 1024
|
||||
print_info: n_embd_v_gqa = 1024
|
||||
print_info: f_norm_eps = 0.0e+00
|
||||
print_info: f_norm_rms_eps = 1.0e-06
|
||||
print_info: f_clamp_kqv = 0.0e+00
|
||||
print_info: f_max_alibi_bias = 0.0e+00
|
||||
print_info: f_logit_scale = 0.0e+00
|
||||
print_info: f_attn_scale = 0.0e+00
|
||||
print_info: n_ff = 12288
|
||||
print_info: n_expert = 0
|
||||
print_info: n_expert_used = 0
|
||||
print_info: causal attn = 1
|
||||
print_info: pooling type = -1
|
||||
print_info: rope type = 2
|
||||
print_info: rope scaling = linear
|
||||
print_info: freq_base_train = 1000000.0
|
||||
print_info: freq_scale_train = 1
|
||||
print_info: n_ctx_orig_yarn = 40960
|
||||
print_info: rope_finetuned = unknown
|
||||
print_info: model type = 8B
|
||||
print_info: model params = 8.19 B
|
||||
print_info: general.name = Llm
|
||||
print_info: vocab type = BPE
|
||||
print_info: n_vocab = 151748
|
||||
print_info: n_merges = 151387
|
||||
print_info: BOS token = 151644 '<|im_start|>'
|
||||
print_info: EOS token = 151645 '<|im_end|>'
|
||||
print_info: EOT token = 151645 '<|im_end|>'
|
||||
print_info: UNK token = 128244 '<unk>'
|
||||
print_info: PAD token = 151643 '<|endoftext|>'
|
||||
print_info: LF token = 198 'Ċ'
|
||||
print_info: FIM PRE token = 151659 '<|fim_prefix|>'
|
||||
print_info: FIM SUF token = 151661 '<|fim_suffix|>'
|
||||
print_info: FIM MID token = 151660 '<|fim_middle|>'
|
||||
print_info: FIM PAD token = 151662 '<|fim_pad|>'
|
||||
print_info: FIM REP token = 151663 '<|repo_name|>'
|
||||
print_info: FIM SEP token = 151664 '<|file_sep|>'
|
||||
print_info: EOG token = 151643 '<|endoftext|>'
|
||||
print_info: EOG token = 151645 '<|im_end|>'
|
||||
print_info: EOG token = 151662 '<|fim_pad|>'
|
||||
print_info: EOG token = 151663 '<|repo_name|>'
|
||||
print_info: EOG token = 151664 '<|file_sep|>'
|
||||
print_info: max token length = 256
|
||||
load_tensors: loading model tensors, this can take a while... (mmap = true)
|
||||
load_tensors: CPU_REPACK model buffer size = 3199.50 MiB
|
||||
load_tensors: CPU_Mapped model buffer size = 4761.17 MiB
|
||||
.....................................................................................
|
||||
llama_context: constructing llama_context
|
||||
llama_context: n_seq_max = 1
|
||||
llama_context: n_ctx = 2048
|
||||
llama_context: n_ctx_per_seq = 2048
|
||||
llama_context: n_batch = 2048
|
||||
llama_context: n_ubatch = 512
|
||||
llama_context: causal_attn = 1
|
||||
llama_context: flash_attn = auto
|
||||
llama_context: kv_unified = false
|
||||
llama_context: freq_base = 1000000.0
|
||||
llama_context: freq_scale = 1
|
||||
llama_context: n_ctx_per_seq (2048) < n_ctx_train (40960) -- the full capacity of the model will not be utilized
|
||||
llama_context: CPU output buffer size = 0.58 MiB
|
||||
llama_kv_cache: CPU KV buffer size = 288.00 MiB
|
||||
llama_kv_cache: size = 288.00 MiB ( 2048 cells, 36 layers, 1/1 seqs), K (f16): 144.00 MiB, V (f16): 144.00 MiB
|
||||
llama_context: Flash Attention was auto, set to enabled
|
||||
llama_context: CPU compute buffer size = 304.38 MiB
|
||||
llama_context: graph nodes = 1267
|
||||
llama_context: graph splits = 1
|
||||
llama_model_loader: loaded meta data with 30 key-value pairs and 193 tensors from C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf/tts/MiniCPM-o-4_5-tts-F16.gguf (version GGUF V3 (latest))
|
||||
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
|
||||
llama_model_loader: - kv 0: general.architecture str = llama
|
||||
llama_model_loader: - kv 1: general.type str = model
|
||||
llama_model_loader: - kv 2: general.name str = Tts
|
||||
llama_model_loader: - kv 3: general.size_label str = 445M
|
||||
llama_model_loader: - kv 4: llama.block_count u32 = 20
|
||||
llama_model_loader: - kv 5: llama.context_length u32 = 4096
|
||||
llama_model_loader: - kv 6: llama.embedding_length u32 = 768
|
||||
llama_model_loader: - kv 7: llama.feed_forward_length u32 = 3072
|
||||
llama_model_loader: - kv 8: llama.attention.head_count u32 = 12
|
||||
llama_model_loader: - kv 9: llama.attention.head_count_kv u32 = 12
|
||||
llama_model_loader: - kv 10: llama.rope.freq_base f32 = 10000.000000
|
||||
llama_model_loader: - kv 11: llama.attention.layer_norm_rms_epsilon f32 = 0.000001
|
||||
llama_model_loader: - kv 12: llama.attention.key_length u32 = 64
|
||||
llama_model_loader: - kv 13: llama.attention.value_length u32 = 64
|
||||
llama_model_loader: - kv 14: general.file_type u32 = 1
|
||||
llama_model_loader: - kv 15: llama.vocab_size u32 = 158626
|
||||
llama_model_loader: - kv 16: llama.rope.dimension_count u32 = 64
|
||||
llama_model_loader: - kv 17: general.quantization_version u32 = 2
|
||||
llama_model_loader: - kv 18: tokenizer.ggml.model str = gpt2
|
||||
llama_model_loader: - kv 19: tokenizer.ggml.pre str = qwen2
|
||||
llama_model_loader: - kv 20: tokenizer.ggml.tokens arr[str,158626] = ["!", "\"", "#", "$", "%", "&", "'", ...
|
||||
llama_model_loader: - kv 21: tokenizer.ggml.token_type arr[i32,158626] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
|
||||
llama_model_loader: - kv 22: tokenizer.ggml.merges arr[str,151387] = ["Ġ Ġ", "ĠĠ ĠĠ", "i n", "Ġ t",...
|
||||
llama_model_loader: - kv 23: tokenizer.ggml.bos_token_id u32 = 151644
|
||||
llama_model_loader: - kv 24: tokenizer.ggml.eos_token_id u32 = 151645
|
||||
llama_model_loader: - kv 25: tokenizer.ggml.unknown_token_id u32 = 128244
|
||||
llama_model_loader: - kv 26: tokenizer.ggml.padding_token_id u32 = 151643
|
||||
llama_model_loader: - kv 27: tokenizer.ggml.add_bos_token bool = false
|
||||
llama_model_loader: - kv 28: tokenizer.chat_template str = {%- if tools %}\n {{- '<|im_start|>...
|
||||
llama_model_loader: - kv 29: tokenizer.ggml.add_space_prefix bool = false
|
||||
llama_model_loader: - type f32: 50 tensors
|
||||
llama_model_loader: - type f16: 143 tensors
|
||||
print_info: file format = GGUF V3 (latest)
|
||||
print_info: file type = F16
|
||||
print_info: file size = 1.07 GiB (20.70 BPW)
|
||||
load: printing all EOG tokens:
|
||||
load: - 151643 ('<|endoftext|>')
|
||||
load: - 151645 ('<|im_end|>')
|
||||
load: - 151662 ('<|fim_pad|>')
|
||||
load: - 151663 ('<|repo_name|>')
|
||||
load: - 151664 ('<|file_sep|>')
|
||||
load: special tokens cache size = 106
|
||||
load: token to piece cache size = 0.9319 MB
|
||||
print_info: arch = llama
|
||||
print_info: vocab_only = 0
|
||||
print_info: n_ctx_train = 4096
|
||||
print_info: n_embd = 768
|
||||
print_info: n_layer = 20
|
||||
print_info: n_head = 12
|
||||
print_info: n_head_kv = 12
|
||||
print_info: n_rot = 64
|
||||
print_info: n_swa = 0
|
||||
print_info: is_swa_any = 0
|
||||
print_info: n_embd_head_k = 64
|
||||
print_info: n_embd_head_v = 64
|
||||
print_info: n_gqa = 1
|
||||
print_info: n_embd_k_gqa = 768
|
||||
print_info: n_embd_v_gqa = 768
|
||||
print_info: f_norm_eps = 0.0e+00
|
||||
print_info: f_norm_rms_eps = 1.0e-06
|
||||
print_info: f_clamp_kqv = 0.0e+00
|
||||
print_info: f_max_alibi_bias = 0.0e+00
|
||||
print_info: f_logit_scale = 0.0e+00
|
||||
print_info: f_attn_scale = 0.0e+00
|
||||
print_info: n_ff = 3072
|
||||
print_info: n_expert = 0
|
||||
print_info: n_expert_used = 0
|
||||
print_info: causal attn = 1
|
||||
print_info: pooling type = 0
|
||||
print_info: rope type = 0
|
||||
print_info: rope scaling = linear
|
||||
print_info: freq_base_train = 10000.0
|
||||
print_info: freq_scale_train = 1
|
||||
print_info: n_ctx_orig_yarn = 4096
|
||||
print_info: rope_finetuned = unknown
|
||||
print_info: model type = ?B
|
||||
print_info: model params = 444.94 M
|
||||
print_info: general.name = Tts
|
||||
print_info: vocab type = BPE
|
||||
print_info: n_vocab = 158626
|
||||
print_info: n_merges = 151387
|
||||
print_info: BOS token = 151644 '<|im_start|>'
|
||||
print_info: EOS token = 151645 '<|im_end|>'
|
||||
print_info: EOT token = 151645 '<|im_end|>'
|
||||
print_info: UNK token = 128244 '<unk>'
|
||||
print_info: PAD token = 151643 '<|endoftext|>'
|
||||
print_info: LF token = 198 'Ċ'
|
||||
print_info: FIM PRE token = 151659 '<|fim_prefix|>'
|
||||
print_info: FIM SUF token = 151661 '<|fim_suffix|>'
|
||||
print_info: FIM MID token = 151660 '<|fim_middle|>'
|
||||
print_info: FIM PAD token = 151662 '<|fim_pad|>'
|
||||
print_info: FIM REP token = 151663 '<|repo_name|>'
|
||||
print_info: FIM SEP token = 151664 '<|file_sep|>'
|
||||
print_info: EOG token = 151643 '<|endoftext|>'
|
||||
print_info: EOG token = 151645 '<|im_end|>'
|
||||
print_info: EOG token = 151662 '<|fim_pad|>'
|
||||
print_info: EOG token = 151663 '<|repo_name|>'
|
||||
print_info: EOG token = 151664 '<|file_sep|>'
|
||||
print_info: max token length = 256
|
||||
load_tensors: loading model tensors, this can take a while... (mmap = true)
|
||||
load_tensors: skipping TTS tensor emb_code.0.weight (size = 20158464 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor emb_text.weight (size = 467140608 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_semantic.linear1.weight (size = 12582912 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_semantic.linear1.bias (size = 3072 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_semantic.linear2.weight (size = 2359296 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_semantic.linear2.bias (size = 3072 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_spk.linear1.weight (size = 6291456 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_spk.linear1.bias (size = 3072 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_spk.linear2.weight (size = 1179648 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor projector_spk.linear2.bias (size = 3072 bytes) -- will be loaded separately
|
||||
load_tensors: skipping TTS tensor head_code.0.weight (size = 20158464 bytes) -- will be loaded separately
|
||||
load_tensors: CPU_Mapped model buffer size = 592.48 MiB
|
||||
..............................................................
|
||||
llama_init_from_model: model default pooling_type is [0], but [-1] was specified
|
||||
llama_context: constructing llama_context
|
||||
llama_context: n_seq_max = 1
|
||||
llama_context: n_ctx = 2048
|
||||
llama_context: n_ctx_per_seq = 2048
|
||||
llama_context: n_batch = 2048
|
||||
llama_context: n_ubatch = 512
|
||||
llama_context: causal_attn = 1
|
||||
llama_context: flash_attn = auto
|
||||
llama_context: kv_unified = false
|
||||
llama_context: freq_base = 10000.0
|
||||
llama_context: freq_scale = 1
|
||||
llama_context: n_ctx_per_seq (2048) < n_ctx_train (4096) -- the full capacity of the model will not be utilized
|
||||
llama_context: CPU output buffer size = 0.61 MiB
|
||||
llama_kv_cache: CPU KV buffer size = 120.00 MiB
|
||||
llama_kv_cache: size = 120.00 MiB ( 2048 cells, 20 layers, 1/1 seqs), K (f16): 60.00 MiB, V (f16): 60.00 MiB
|
||||
llama_context: Flash Attention was auto, set to enabled
|
||||
llama_context: CPU compute buffer size = 25.51 MiB
|
||||
llama_context: graph nodes = 613
|
||||
llama_context: graph splits = 1
|
||||
vision_model_loader: model name:
|
||||
vision_model_loader: description: image encoder for MiniCPM-V
|
||||
vision_model_loader: GGUF version: 3
|
||||
vision_model_loader: alignment: 32
|
||||
vision_model_loader: n_tensors: 455
|
||||
vision_model_loader: n_kv: 20
|
||||
|
||||
vision_ctx: vision using CPU backend
|
||||
load_hparams: model_type: 0
|
||||
load_hparams: n_embd: 1152
|
||||
load_hparams: n_head: 16
|
||||
load_hparams: n_ff: 4304
|
||||
load_hparams: n_layer: 27
|
||||
load_hparams: ffn_op: gelu
|
||||
load_hparams: projection_dim: 0
|
||||
|
||||
--- vision hparams ---
|
||||
load_hparams: image_size: 448
|
||||
load_hparams: patch_size: 14
|
||||
load_hparams: minicpmv_version: 100045
|
||||
load_hparams: proj_scale_factor: 0
|
||||
load_hparams: n_wa_pattern: 0
|
||||
|
||||
load_hparams: model size: 1044.36 MiB
|
||||
load_hparams: metadata size: 0.16 MiB
|
||||
load_tensors: ffn up/down are swapped
|
||||
alloc_compute_meta: CPU compute buffer size = 100.30 MiB
|
||||
init tts....init t2w....voc_hg2_model: CPU backend using 8 threads
|
||||
audition_audio_preprocess: Decoded audio - sample_rate=16000, n_samples=32000
|
||||
audition_get_mel_filters: Retrieved mel filters from model: 80 mel bins x 201 fft bins
|
||||
audition_audio_preprocess: Using mel filters - n_mel=80, n_fft=201
|
||||
audition_audio_preprocess: Generated 1 mel spectrogram chunk(s)
|
||||
audition_audio_preprocess: Mel spectrogram ready - n_len=200, n_mel=80, total_size=16000
|
||||
build_whisper: Whisper encoder graph built (projector output, pre-pooling)
|
||||
audition_audio_batch_encode: Audio input data - n_step=200, n_mel=80, total_elements=16000
|
||||
audition_audio_batch_encode: Before incrementing iter: input_frames=200, n_tokens=100, current_iter=0, current_total=0, new_total=100, max_tokens=1500
|
||||
audition_audio_batch_encode: KV cache iter incremented to 1 (total_tokens=100, max_tokens=1500)
|
||||
audition_audio_batch_encode: Final output shape: [4096, 20]
|
||||
audition_audio_batch_encode: Final output: 20 tokens x 4096 dims
|
||||
encode_image_with_vision_chunks: step 1 of 1 encoded in 3538.25 ms
|
||||
encode_image_with_vision_chunks: all 1 chunks encoded in 3560.67 ms (grid: 1x1)
|
||||
|
||||
encode_image_with_vision_chunks: image encoded in 3560.68 ms by vision ( 3560.68 ms per chunk, 64 total tokens)
|
||||
omni_image_embed_make_chunks_with_filename: created 1 vision chunks from C:\Users\zhout\w2\minicpmo_cpp_cpu_v3\fixture_0001.jpg
|
||||
stream_prefill: prefilled 1 vision chunks (64 tokens each)
|
||||
audition_audio_preprocess: Decoded audio - sample_rate=16000, n_samples=32000
|
||||
audition_get_mel_filters: Retrieved mel filters from model: 80 mel bins x 201 fft bins
|
||||
audition_audio_preprocess: Using mel filters - n_mel=80, n_fft=201
|
||||
audition_audio_preprocess: Generated 1 mel spectrogram chunk(s)
|
||||
audition_audio_preprocess: Mel spectrogram ready - n_len=200, n_mel=80, total_size=16000
|
||||
build_whisper: Whisper encoder graph built (projector output, pre-pooling)
|
||||
audition_audio_batch_encode: Audio input data - n_step=200, n_mel=80, total_elements=16000
|
||||
audition_audio_batch_encode: Before incrementing iter: input_frames=200, n_tokens=100, current_iter=1, current_total=100, new_total=200, max_tokens=1500
|
||||
audition_audio_batch_encode: KV cache iter incremented to 2 (total_tokens=200, max_tokens=1500)
|
||||
audition_audio_batch_encode: Final output shape: [4096, 20]
|
||||
audition_audio_batch_encode: Final output: 20 tokens x 4096 dims
|
||||
<user>
|
||||
<assistant>[timing] call=0 tokens=28 final=0 token2mel=3008.347ms vocoder=441.612ms total=3449.977ms audio=20160
|
||||
[timing] call=1 tokens=28 final=0 token2mel=2867.322ms vocoder=514.727ms total=3382.072ms audio=24000
|
||||
[timing] call=2 tokens=28 final=0 token2mel=2966.215ms vocoder=499.383ms total=3465.615ms audio=24000
|
||||
[timing] call=3 tokens=28 final=0 token2mel=2871.007ms vocoder=487.908ms total=3358.955ms audio=24000
|
||||
[timing] call=4 tokens=28 final=0 token2mel=2949.518ms vocoder=501.990ms total=3451.537ms audio=24000
|
||||
[timing] call=5 tokens=28 final=0 token2mel=2706.893ms vocoder=468.788ms total=3175.696ms audio=24000
|
||||
Waiting for audio generation to complete...
|
||||
[timing] call=6 tokens=28 final=0 token2mel=2419.876ms vocoder=402.004ms total=2821.890ms audio=24000
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_0.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_1.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_2.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_3.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_4.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_5.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_6.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_7.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_8.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_9.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_10.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_11.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_12.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_13.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_14.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_15.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_16.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_17.wav does not exist or is empty
|
||||
TTS: chunk file ./tools/omni/output/round_000/tts_wav/tts_output_chunk_18.wav does not exist or is empty
|
||||
TTS: no valid WAV files to merge
|
||||
[timing] call=7 tokens=28 final=0 token2mel=1998.322ms vocoder=380.397ms total=2378.729ms audio=24000
|
||||
[timing] call=8 tokens=28 final=0 token2mel=1851.460ms vocoder=373.980ms total=2225.451ms audio=24000
|
||||
[timing] call=9 tokens=28 final=0 token2mel=1855.032ms vocoder=376.188ms total=2231.231ms audio=24000
|
||||
[timing] call=10 tokens=28 final=0 token2mel=1839.380ms vocoder=373.340ms total=2212.733ms audio=24000
|
||||
[timing] call=11 tokens=28 final=0 token2mel=1832.723ms vocoder=369.453ms total=2202.187ms audio=24000
|
||||
[timing] call=12 tokens=28 final=0 token2mel=1839.659ms vocoder=373.948ms total=2213.620ms audio=24000
|
||||
[timing] call=13 tokens=28 final=0 token2mel=1825.662ms vocoder=377.159ms total=2202.833ms audio=24000
|
||||
[timing] call=14 tokens=28 final=0 token2mel=1834.524ms vocoder=378.257ms total=2212.792ms audio=24000
|
||||
[timing] call=15 tokens=28 final=0 token2mel=1827.935ms vocoder=376.774ms total=2204.721ms audio=24000
|
||||
[timing] call=16 tokens=28 final=0 token2mel=1819.256ms vocoder=371.231ms total=2190.499ms audio=24000
|
||||
[timing] call=17 tokens=28 final=0 token2mel=1836.480ms vocoder=374.681ms total=2211.173ms audio=24000
|
||||
[timing] call=18 tokens=28 final=0 token2mel=1826.588ms vocoder=372.420ms total=2199.018ms audio=24000
|
||||
[timing] call=19 tokens=28 final=0 token2mel=1862.405ms vocoder=369.565ms total=2231.984ms audio=24000
|
||||
[timing] call=20 tokens=28 final=0 token2mel=1824.354ms vocoder=379.717ms total=2204.082ms audio=24000
|
||||
[timing] call=21 tokens=28 final=0 token2mel=1828.966ms vocoder=374.241ms total=2203.219ms audio=24000
|
||||
[timing] call=22 tokens=28 final=0 token2mel=1830.597ms vocoder=376.619ms total=2207.228ms audio=24000
|
||||
[timing] call=23 tokens=28 final=0 token2mel=1862.567ms vocoder=382.669ms total=2245.247ms audio=24000
|
||||
[timing] call=24 tokens=28 final=0 token2mel=1832.274ms vocoder=384.729ms total=2217.013ms audio=24000
|
||||
[timing] call=25 tokens=28 final=0 token2mel=1827.821ms vocoder=374.201ms total=2202.034ms audio=24000
|
||||
[timing] call=26 tokens=28 final=0 token2mel=1837.246ms vocoder=376.361ms total=2213.620ms audio=24000
|
||||
[timing] call=27 tokens=28 final=0 token2mel=1829.673ms vocoder=378.150ms total=2207.835ms audio=24000
|
||||
[timing] call=28 tokens=28 final=0 token2mel=1838.582ms vocoder=375.693ms total=2214.287ms audio=24000
|
||||
[timing] call=29 tokens=28 final=0 token2mel=1837.139ms vocoder=374.800ms total=2211.950ms audio=24000
|
||||
[timing] call=30 tokens=28 final=0 token2mel=1818.072ms vocoder=377.411ms total=2195.493ms audio=24000
|
||||
[timing] call=31 tokens=28 final=0 token2mel=1831.503ms vocoder=372.541ms total=2204.056ms audio=24000
|
||||
[timing] call=32 tokens=28 final=0 token2mel=1847.361ms vocoder=373.726ms total=2221.098ms audio=24000
|
||||
[timing] call=33 tokens=28 final=0 token2mel=1841.079ms vocoder=378.310ms total=2219.402ms audio=24000
|
||||
[timing] call=34 tokens=28 final=0 token2mel=1828.232ms vocoder=383.369ms total=2211.613ms audio=24000
|
||||
[timing] call=35 tokens=28 final=0 token2mel=1823.123ms vocoder=380.919ms total=2204.053ms audio=24000
|
||||
[timing] call=36 tokens=28 final=0 token2mel=1828.180ms vocoder=373.026ms total=2201.218ms audio=24000
|
||||
[timing] call=37 tokens=28 final=0 token2mel=1819.845ms vocoder=377.691ms total=2197.552ms audio=24000
|
||||
[timing] call=38 tokens=28 final=0 token2mel=1817.171ms vocoder=376.247ms total=2193.428ms audio=24000
|
||||
[timing] call=39 tokens=28 final=0 token2mel=1825.358ms vocoder=378.877ms total=2204.246ms audio=24000
|
||||
[timing] call=40 tokens=28 final=0 token2mel=1820.798ms vocoder=369.805ms total=2190.615ms audio=24000
|
||||
[timing] call=41 tokens=28 final=0 token2mel=1827.390ms vocoder=375.167ms total=2202.568ms audio=24000
|
||||
[timing] call=42 tokens=28 final=0 token2mel=1828.504ms vocoder=380.181ms total=2208.697ms audio=24000
|
||||
[timing] call=43 tokens=28 final=0 token2mel=1826.139ms vocoder=368.356ms total=2194.507ms audio=24000
|
||||
[timing] call=44 tokens=28 final=0 token2mel=1819.542ms vocoder=378.423ms total=2197.977ms audio=24000
|
||||
[timing] call=45 tokens=28 final=0 token2mel=1849.443ms vocoder=377.706ms total=2227.162ms audio=24000
|
||||
[timing] call=46 tokens=28 final=0 token2mel=1819.117ms vocoder=377.801ms total=2196.930ms audio=24000
|
||||
[timing] call=47 tokens=28 final=0 token2mel=1821.994ms vocoder=389.097ms total=2211.102ms audio=24000
|
||||
[timing] call=48 tokens=28 final=0 token2mel=1825.848ms vocoder=382.629ms total=2208.488ms audio=24000
|
||||
[timing] call=49 tokens=4 final=1 token2mel=1862.430ms vocoder=126.245ms total=1988.684ms audio=7680
|
||||
Audio generation completed.
|
||||
llama_perf_context_print: load time = 14730.90 ms
|
||||
llama_perf_context_print: prompt eval time = 13109.86 ms / 171 tokens ( 76.67 ms per token, 13.04 tokens per second)
|
||||
llama_perf_context_print: eval time = 21868.63 ms / 177 runs ( 123.55 ms per token, 8.09 tokens per second)
|
||||
llama_perf_context_print: total time = 134277.18 ms / 348 tokens
|
||||
llama_perf_context_print: graphs reused = 177
|
||||
Token2Wav (C++): session released
|
||||
+662
@@ -0,0 +1,662 @@
|
||||
=== Model Paths ===
|
||||
Base dir: C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf
|
||||
LLM: C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf\MiniCPM-o-4_5-Q4_K_M.gguf [OK]
|
||||
Vision: C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf/vision/MiniCPM-o-4_5-vision-F16.gguf [OK]
|
||||
Audio: C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf/audio/MiniCPM-o-4_5-audio-F16.gguf [OK]
|
||||
TTS: C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf/tts/MiniCPM-o-4_5-tts-F16.gguf [OK]
|
||||
Projector: C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf/tts/MiniCPM-o-4_5-projector-F16.gguf [OK]
|
||||
===================
|
||||
=== Initializing Omni Context ===
|
||||
Media type: 2 (omni: audio+vision)
|
||||
TTS enabled: yes
|
||||
Context size: 2048
|
||||
GPU layers: 0
|
||||
Token2Wav device: cpu
|
||||
Vision backend: metal
|
||||
TTS bin dir: C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf/tts
|
||||
Ref audio: C:\Users\zhout\w2\minicpmo_cpp_cpu_v3\default_ref_audio.wav
|
||||
22:06:34.706 === omni_init start
|
||||
22:06:34.706 media_type = 2, duplex_mode = 0, base_output_dir = ./tools/omni/output
|
||||
22:06:34.706 === omni_init: loading new LLM model
|
||||
22:06:36.666 === omni_init: loading TTS model
|
||||
22:06:36.666 TTS model: loading with n_gpu_layers=0
|
||||
22:06:36.921 TTS sampler: temp=0.80, top_p=0.85, top_k=25, rep_penalty=1.05
|
||||
22:06:36.921 TTS: loading weights from GGUF (emb_code, emb_text, projector_semantic, head_code)...
|
||||
22:06:37.318 TTS: head_code shape: dim0=6562, dim1=768, will transpose to [6562, 768]
|
||||
22:06:37.323 TTS: head_code loaded, verifying first few values:
|
||||
22:06:37.323 head_code_weight[0] = 0.01361084 (expect ~0.01385498)
|
||||
22:06:37.323 head_code_weight[1] = -0.01660156 (expect ~-0.01647949)
|
||||
22:06:37.323 head_code_weight[768] = 0.04101562 (this is weight[1, 0], expect ~0.04150391)
|
||||
22:06:37.394 TTS: weights loaded successfully
|
||||
22:06:37.394 Projector: loading from C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf/tts/MiniCPM-o-4_5-projector-F16.gguf
|
||||
22:06:37.400 Projector: loaded successfully
|
||||
22:06:37.400 === omni_init: loading APM model
|
||||
22:06:37.566 APM: init from C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf/audio/MiniCPM-o-4_5-audio-F16.gguf
|
||||
22:06:37.887 Token2Wav: found models in C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf/token2wav-gguf
|
||||
22:06:37.887 Token2Wav: all model files found, initializing session...
|
||||
22:06:37.887 Token2Wav: non-CUDA backend, vocoder using CPU for better performance
|
||||
22:06:37.887 Token2Wav: using prompt_cache from C:\Users\zhout\w2\models\MiniCPM-o-4_5-gguf/token2wav-gguf/prompt_cache.gguf
|
||||
22:06:38.287 Token2Wav: initialized successfully
|
||||
22:06:38.287 Python T2W: script_dir=./tools/omni/pyt2w, model_dir=./tools/omni/pyt2w/token2wav
|
||||
22:06:38.287 Token2Wav: 使用 C++ 实现
|
||||
22:06:38.287 === omni_init success: ctx_llama = 000002531cb7f960
|
||||
=== Running test case ===
|
||||
Audio prefix: C:\Users\zhout\w2\minicpmo_cpp_cpu_v3\fixture_
|
||||
Count: 2
|
||||
22:06:38.287 stream_prefill: n_past = 0
|
||||
voice_clone_prompt = <|im_start|>system
|
||||
æ¨¡ä»¿éŸ³é¢‘æ ·æœ¬çš„éŸ³è‰²å¹¶ç”Ÿæˆ�新的内容。
|
||||
<|audio_start|>
|
||||
assistant_prompt = <|audio_end|>ä½ çš„ä»»åŠ¡æ˜¯ç”¨è¿™ç§�声音模å¼�æ�¥å½“一个助手。请认真ã€�高质é‡�地回å¤�用户的问题。请用高自然度的方å¼�和用户è�Šå¤©ã€‚<|im_end|>
|
||||
<|im_start|>user
|
||||
|
||||
22:06:38.287 system prompt ref_audio: C:\Users\zhout\w2\minicpmo_cpp_cpu_v3\fixture_0000.wav
|
||||
22:06:39.442 system prompt ref_audio embedding: n_pos=20
|
||||
22:06:42.334 🔒 n_keep 设置为 72 (system prompt tokens),这部分永远ä¸�会被滑动窗å�£åˆ 除
|
||||
22:06:42.334 stream_prefill(index=0): system prompt åˆ�始化完æˆ�,ref_audio å·²åœ¨å…¶ä¸ prefill
|
||||
22:06:42.334 [SW] system_prompt registered: preserve_length=72 (will be protected from sliding)
|
||||
22:06:42.334 n_past = 72
|
||||
22:06:42.334
|
||||
|
||||
c++ finish stream_prefill(index=0). n_past=72, n_keep=72, n_ctx=2048
|
||||
|
||||
prefill 0 (audio) : 4.04691 s
|
||||
22:06:49.516 stream_prefill(index=1): processing user audio: C:\Users\zhout\w2\minicpmo_cpp_cpu_v3\fixture_0001.wav
|
||||
22:06:49.712 stream_prefill(index=1): user audio embedding: n_pos=20
|
||||
22:06:50.867
|
||||
|
||||
c++ finish stream_prefill(index=1). n_past=161, n_keep=72, n_ctx=2048
|
||||
|
||||
prefill 1 (audio+vision) : 8.53188 s
|
||||
22:06:50.867 � stream_decode 开始: n_past=161, n_keep=72, n_ctx=2048, duplex_mode=0
|
||||
22:06:50.867 stream_decode: create tts thread (simplex mode)
|
||||
22:06:50.867 stream_decode: create t2w thread
|
||||
22:06:50.867 wait prefill done
|
||||
22:06:50.867 ðŸ“� [å�•å·¥TTS] æ·»åŠ assistant prompt: "<|im_end|>
|
||||
<|im_start|>assistant
|
||||
<think>
|
||||
|
||||
</think>
|
||||
|
||||
<|tts_bos|>", n_past=161
|
||||
22:06:50.867 T2W thread (C++) started
|
||||
22:06:50.870 TTS: 创建�工模�输出目录: ./tools/omni/output/round_000
|
||||
22:06:50.870 TTS thread started
|
||||
22:06:51.397 � [�工TTS] assistant prompt 完�, n_past=171
|
||||
22:06:51.397 LLM decode: max_tgt_len = 2048, n_predict = -1, n_ctx = 2048
|
||||
22:06:52.281 LLM->TTS: text='哎呀,这个问题挺有��的��是让我去', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[110030 104256 3837 105073 101174 113062 6313 104806 104029 85336]
|
||||
22:06:52.281 TTS<-LLM: chunk_idx=0, text='哎呀,这个问题挺有��的��是让我去', n_tokens=10, hidden_size=40960, token_ids=[110030 104256 3837 105073 101174 113062 6313 104806 104029 85336]
|
||||
22:06:52.281 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:06:52.281 TTS: before empty check - response.empty=0, response='哎呀,这个问题挺有æ„�æ€�çš„ï¼�è¦�是让æˆ', llm_finish=0
|
||||
22:06:52.281 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:06:52.281 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:06:52.282 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:06:52.323 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_0/merged_embeddings.txt
|
||||
22:06:52.324 TTS Simplex: generating audio tokens for chunk 0 (n_tokens=10, tts_n_embd=768)
|
||||
22:06:52.324 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=0, new_size=11)
|
||||
22:06:52.324 TTS Simplex: first chunk - cleared KV cache
|
||||
22:06:52.324 TTS Simplex: first chunk - cleared tts_all_generated_tokens and tts_token_buffer
|
||||
22:06:52.430 TTS Simplex: prefill completed, n_past_tts=11
|
||||
22:06:52.430 TTS Simplex: sampler created
|
||||
22:06:52.430 TTS simplex: is_audio_bos=true (first audio token)
|
||||
22:06:52.472 TTS Simplex Phase1: token 1/500: rel_id=1490
|
||||
22:06:52.486 TTS Simplex Phase1: token 2/500: rel_id=4299
|
||||
22:06:52.499 TTS Simplex Phase1: token 3/500: rel_id=6486
|
||||
22:06:52.512 TTS Simplex Phase1: token 4/500: rel_id=4299
|
||||
22:06:52.527 TTS Simplex Phase1: token 5/500: rel_id=4299
|
||||
22:06:52.815 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 25, buffer=25)
|
||||
22:06:52.815 TTS Simplex Phase1: token 25/500: rel_id=2139
|
||||
22:06:52.815 T2W线程(C++): 轮次切� (-1 -> 0),更新输出目录
|
||||
22:06:52.815 T2W线程(C++): 新输出目录 ./tools/omni/output/round_000/tts_wav
|
||||
22:06:53.192 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 50, buffer=25)
|
||||
22:06:53.192 TTS Simplex Phase1: token 50/500: rel_id=4607
|
||||
22:06:53.350 LLM->TTS: text='一个完全没去过的地方,那我肯定得', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[46944 100372 70927 112955 103958 3837 99212 35946 100736 49828]
|
||||
22:06:53.407 TTS Simplex Phase1: EOS token at step 65
|
||||
22:06:53.407 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 14 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:06:53.407 TTS Simplex: generated 64 audio tokens for chunk 0
|
||||
22:06:53.407 TTS Simplex: chunk 0 first tokens: [1490 4299 6486 4299 4299 ], last tokens: [1945 4299 6486 6486 4299 ]
|
||||
22:06:53.407 TTS Simplex: updated tts_n_past_accumulated=75, total_generated_tokens=64
|
||||
22:06:53.419 TTS<-LLM: chunk_idx=1, text='一个完全没去过的地方,那我肯定得', n_tokens=10, hidden_size=40960, token_ids=[46944 100372 70927 112955 103958 3837 99212 35946 100736 49828]
|
||||
22:06:53.419 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:06:53.419 TTS: before empty check - response.empty=0, response='一个完全没去过的地方,那我肯定得', llm_finish=0
|
||||
22:06:53.419 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:06:53.419 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:06:53.419 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:06:53.460 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_1/merged_embeddings.txt
|
||||
22:06:53.460 TTS Simplex: generating audio tokens for chunk 1 (n_tokens=10, tts_n_embd=768)
|
||||
22:06:53.460 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=1, new_size=11)
|
||||
22:06:53.460 TTS Simplex: chunk 1 - keeping KV cache, n_past_tts=75
|
||||
22:06:53.487 TTS Simplex: prefill completed, n_past_tts=86
|
||||
22:06:53.487 TTS Simplex: sampler created
|
||||
22:06:53.506 TTS Simplex Phase1: token 1/500: rel_id=6486
|
||||
22:06:53.523 TTS Simplex Phase1: token 2/500: rel_id=6405
|
||||
22:06:53.537 TTS Simplex Phase1: token 3/500: rel_id=5838
|
||||
22:06:53.553 TTS Simplex Phase1: token 4/500: rel_id=5919
|
||||
22:06:53.569 TTS Simplex Phase1: token 5/500: rel_id=4218
|
||||
22:06:53.660 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 11, buffer=25)
|
||||
22:06:53.883 TTS Simplex Phase1: token 25/500: rel_id=879
|
||||
22:06:54.057 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 36, buffer=25)
|
||||
22:06:54.278 TTS Simplex Phase1: token 50/500: rel_id=5649
|
||||
22:06:54.447 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 61, buffer=25)
|
||||
22:06:54.487 LLM->TTS: text='去北æž�啊ï¼�ä½ æƒ³å•Šï¼Œé‚£åœ°æ–¹å†°', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[85336 113081 103924 6313 107409 103924 3837 99212 100371 100038]
|
||||
22:06:54.664 TTS Simplex Phase1: token 75/500: rel_id=5838
|
||||
22:06:54.768 TTS Simplex Phase1: EOS token at step 82
|
||||
22:06:54.768 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 20 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:06:54.768 TTS Simplex: generated 81 audio tokens for chunk 1
|
||||
22:06:54.768 TTS Simplex: chunk 1 first tokens: [6486 6405 5838 5919 4218 ], last tokens: [1545 1959 3750 19 5837 ]
|
||||
22:06:54.768 TTS Simplex: updated tts_n_past_accumulated=167, total_generated_tokens=145
|
||||
22:06:54.770 TTS<-LLM: chunk_idx=2, text='去北æž�啊ï¼�ä½ æƒ³å•Šï¼Œé‚£åœ°æ–¹å†°', n_tokens=10, hidden_size=40960, token_ids=[85336 113081 103924 6313 107409 103924 3837 99212 100371 100038]
|
||||
22:06:54.770 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:06:54.770 TTS: before empty check - response.empty=0, response='去北æž�啊ï¼�ä½ æƒ³å•Šï¼Œé‚£åœ°æ–¹å†°', llm_finish=0
|
||||
22:06:54.770 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:06:54.770 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:06:54.770 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:06:54.819 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_2/merged_embeddings.txt
|
||||
22:06:54.819 TTS Simplex: generating audio tokens for chunk 2 (n_tokens=10, tts_n_embd=768)
|
||||
22:06:54.819 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=2, new_size=11)
|
||||
22:06:54.819 TTS Simplex: chunk 2 - keeping KV cache, n_past_tts=167
|
||||
22:06:54.848 TTS Simplex: prefill completed, n_past_tts=178
|
||||
22:06:54.848 TTS Simplex: sampler created
|
||||
22:06:54.866 TTS Simplex Phase1: token 1/500: rel_id=497
|
||||
22:06:54.881 TTS Simplex Phase1: token 2/500: rel_id=701
|
||||
22:06:54.896 TTS Simplex Phase1: token 3/500: rel_id=2870
|
||||
22:06:54.911 TTS Simplex Phase1: token 4/500: rel_id=5086
|
||||
22:06:54.927 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 5, buffer=25)
|
||||
22:06:54.927 TTS Simplex Phase1: token 5/500: rel_id=975
|
||||
22:06:55.273 TTS Simplex Phase1: token 25/500: rel_id=2085
|
||||
22:06:55.369 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 30, buffer=25)
|
||||
22:06:55.746 TTS Simplex Phase1: token 50/500: rel_id=5402
|
||||
22:06:55.799 LLM->TTS: text='天雪地的,白茫茫的一片,', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[35727 100167 29490 9370 3837 99243 116059 99774 34718 3837]
|
||||
22:06:55.836 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 55, buffer=25)
|
||||
22:06:56.075 TTS Simplex Phase1: EOS token at step 68
|
||||
22:06:56.075 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 12 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:06:56.075 TTS Simplex: generated 67 audio tokens for chunk 2
|
||||
22:06:56.075 TTS Simplex: chunk 2 first tokens: [497 701 2870 5086 975 ], last tokens: [3972 3648 5835 5838 1458 ]
|
||||
22:06:56.075 TTS Simplex: updated tts_n_past_accumulated=245, total_generated_tokens=212
|
||||
22:06:56.079 TTS<-LLM: chunk_idx=3, text='天雪地的,白茫茫的一片,', n_tokens=10, hidden_size=40960, token_ids=[35727 100167 29490 9370 3837 99243 116059 99774 34718 3837]
|
||||
22:06:56.079 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:06:56.079 TTS: before empty check - response.empty=0, response='天雪地的,白茫茫的一片,', llm_finish=0
|
||||
22:06:56.079 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:06:56.079 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:06:56.079 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:06:56.133 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_3/merged_embeddings.txt
|
||||
22:06:56.133 TTS Simplex: generating audio tokens for chunk 3 (n_tokens=10, tts_n_embd=768)
|
||||
22:06:56.133 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=3, new_size=11)
|
||||
22:06:56.133 TTS Simplex: chunk 3 - keeping KV cache, n_past_tts=245
|
||||
22:06:56.176 TTS Simplex: prefill completed, n_past_tts=256
|
||||
22:06:56.176 TTS Simplex: sampler created
|
||||
22:06:56.199 TTS Simplex Phase1: token 1/500: rel_id=4299
|
||||
22:06:56.220 TTS Simplex Phase1: token 2/500: rel_id=3909
|
||||
22:06:56.245 TTS Simplex Phase1: token 3/500: rel_id=5850
|
||||
22:06:56.266 TTS Simplex Phase1: token 4/500: rel_id=4459
|
||||
22:06:56.267 🎉 首�时间 (First Audio Response): 5400ms
|
||||
22:06:56.267 T2W线程: wav_0.wav | 0.84s audio | 3450.0ms inference | RTF=4.11 | t=5400ms
|
||||
22:06:56.284 TTS Simplex Phase1: token 5/500: rel_id=4409
|
||||
22:06:56.414 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 13, buffer=25)
|
||||
22:06:56.610 TTS Simplex Phase1: token 25/500: rel_id=4507
|
||||
22:06:56.826 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 38, buffer=25)
|
||||
22:06:57.036 TTS Simplex Phase1: token 50/500: rel_id=4570
|
||||
22:06:57.040 LLM->TTS: text='连路都没有,走路都得�心翼翼的。', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[54926 45995 104338 3837 109214 71268 49828 114890 9370 1773]
|
||||
22:06:57.197 TTS Simplex Phase1: EOS token at step 60
|
||||
22:06:57.197 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 21 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:06:57.197 TTS Simplex: generated 59 audio tokens for chunk 3
|
||||
22:06:57.197 TTS Simplex: chunk 3 first tokens: [4299 3909 5850 4459 4409 ], last tokens: [4314 2855 3404 4871 3987 ]
|
||||
22:06:57.197 TTS Simplex: updated tts_n_past_accumulated=315, total_generated_tokens=271
|
||||
22:06:57.199 TTS<-LLM: chunk_idx=4, text='连路都没有,走路都得�心翼翼的。', n_tokens=10, hidden_size=40960, token_ids=[54926 45995 104338 3837 109214 71268 49828 114890 9370 1773]
|
||||
22:06:57.199 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:06:57.199 TTS: before empty check - response.empty=0, response='连路都没有,走路都得�心翼翼的。', llm_finish=0
|
||||
22:06:57.199 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:06:57.199 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:06:57.199 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:06:57.244 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_4/merged_embeddings.txt
|
||||
22:06:57.244 TTS Simplex: generating audio tokens for chunk 4 (n_tokens=10, tts_n_embd=768)
|
||||
22:06:57.244 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=4, new_size=11)
|
||||
22:06:57.244 TTS Simplex: chunk 4 - keeping KV cache, n_past_tts=315
|
||||
22:06:57.283 TTS Simplex: prefill completed, n_past_tts=326
|
||||
22:06:57.283 TTS Simplex: sampler created
|
||||
22:06:57.300 TTS Simplex Phase1: token 1/500: rel_id=2234
|
||||
22:06:57.316 TTS Simplex Phase1: token 2/500: rel_id=4769
|
||||
22:06:57.332 TTS Simplex Phase1: token 3/500: rel_id=3455
|
||||
22:06:57.347 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 4, buffer=25)
|
||||
22:06:57.347 TTS Simplex Phase1: token 4/500: rel_id=1268
|
||||
22:06:57.364 TTS Simplex Phase1: token 5/500: rel_id=4778
|
||||
22:06:57.709 TTS Simplex Phase1: token 25/500: rel_id=5958
|
||||
22:06:57.774 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 29, buffer=25)
|
||||
22:06:58.116 TTS Simplex Phase1: token 50/500: rel_id=2112
|
||||
22:06:58.186 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 54, buffer=25)
|
||||
22:06:58.276 LLM->TTS: text='ä½†ä½ è¯´è¿™åœ°æ–¹å¤šåˆºæ¿€ï¼�穿厚厚的羽', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[77288 105665 43288 100371 42140 104313 6313 99621 118100 101433]
|
||||
22:06:58.446 TTS Simplex Phase1: EOS token at step 70
|
||||
22:06:58.446 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 15 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:06:58.446 TTS Simplex: generated 69 audio tokens for chunk 4
|
||||
22:06:58.446 TTS Simplex: chunk 4 first tokens: [2234 4769 3455 1268 4778 ], last tokens: [2264 4841 4417 5402 2212 ]
|
||||
22:06:58.446 TTS Simplex: updated tts_n_past_accumulated=395, total_generated_tokens=340
|
||||
22:06:58.458 TTS<-LLM: chunk_idx=5, text='ä½†ä½ è¯´è¿™åœ°æ–¹å¤šåˆºæ¿€ï¼�穿厚厚的羽', n_tokens=10, hidden_size=40960, token_ids=[77288 105665 43288 100371 42140 104313 6313 99621 118100 101433]
|
||||
22:06:58.458 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:06:58.458 TTS: before empty check - response.empty=0, response='ä½†ä½ è¯´è¿™åœ°æ–¹å¤šåˆºæ¿€ï¼�穿厚厚的羽', llm_finish=0
|
||||
22:06:58.458 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:06:58.458 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:06:58.458 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:06:58.505 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_5/merged_embeddings.txt
|
||||
22:06:58.505 TTS Simplex: generating audio tokens for chunk 5 (n_tokens=10, tts_n_embd=768)
|
||||
22:06:58.505 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=5, new_size=11)
|
||||
22:06:58.505 TTS Simplex: chunk 5 - keeping KV cache, n_past_tts=395
|
||||
22:06:58.551 TTS Simplex: prefill completed, n_past_tts=406
|
||||
22:06:58.551 TTS Simplex: sampler created
|
||||
22:06:58.575 TTS Simplex Phase1: token 1/500: rel_id=1217
|
||||
22:06:58.597 TTS Simplex Phase1: token 2/500: rel_id=272
|
||||
22:06:58.617 TTS Simplex Phase1: token 3/500: rel_id=5170
|
||||
22:06:58.639 TTS Simplex Phase1: token 4/500: rel_id=6374
|
||||
22:06:58.658 TTS Simplex Phase1: token 5/500: rel_id=321
|
||||
22:06:58.759 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 10, buffer=25)
|
||||
22:06:59.073 TTS Simplex Phase1: token 25/500: rel_id=3648
|
||||
22:06:59.291 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 35, buffer=25)
|
||||
22:06:59.610 TTS Simplex Phase1: token 50/500: rel_id=2764
|
||||
22:06:59.651 T2W线程: wav_1.wav | 1.00s audio | 3382.1ms inference | RTF=3.38 | t=8783ms
|
||||
22:06:59.686 LLM->TTS: text='绒�,戴上防风手套,脚底下', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[108040 43209 3837 113142 99287 99208 113739 3837 100037 109237]
|
||||
22:06:59.791 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 60, buffer=25)
|
||||
22:07:00.057 TTS Simplex Phase1: token 75/500: rel_id=6048
|
||||
22:07:00.060 TTS Simplex Phase1: EOS token at step 76
|
||||
22:07:00.060 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 15 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:00.060 TTS Simplex: generated 75 audio tokens for chunk 5
|
||||
22:07:00.060 TTS Simplex: chunk 5 first tokens: [1217 272 5170 6374 321 ], last tokens: [6486 4299 4299 1518 6048 ]
|
||||
22:07:00.060 TTS Simplex: updated tts_n_past_accumulated=481, total_generated_tokens=415
|
||||
22:07:00.062 TTS<-LLM: chunk_idx=6, text='绒�,戴上防风手套,脚底下', n_tokens=10, hidden_size=40960, token_ids=[108040 43209 3837 113142 99287 99208 113739 3837 100037 109237]
|
||||
22:07:00.062 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:07:00.062 TTS: before empty check - response.empty=0, response='绒�,戴上防风手套,脚底下', llm_finish=0
|
||||
22:07:00.062 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:07:00.062 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:07:00.062 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:07:00.101 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_6/merged_embeddings.txt
|
||||
22:07:00.101 TTS Simplex: generating audio tokens for chunk 6 (n_tokens=10, tts_n_embd=768)
|
||||
22:07:00.101 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=6, new_size=11)
|
||||
22:07:00.101 TTS Simplex: chunk 6 - keeping KV cache, n_past_tts=481
|
||||
22:07:00.140 TTS Simplex: prefill completed, n_past_tts=492
|
||||
22:07:00.141 TTS Simplex: sampler created
|
||||
22:07:00.158 TTS Simplex Phase1: token 1/500: rel_id=1377
|
||||
22:07:00.174 TTS Simplex Phase1: token 2/500: rel_id=3898
|
||||
22:07:00.190 TTS Simplex Phase1: token 3/500: rel_id=2513
|
||||
22:07:00.208 TTS Simplex Phase1: token 4/500: rel_id=4961
|
||||
22:07:00.223 TTS Simplex Phase1: token 5/500: rel_id=4869
|
||||
22:07:00.307 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 10, buffer=25)
|
||||
22:07:00.570 TTS Simplex Phase1: token 25/500: rel_id=6507
|
||||
22:07:00.762 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 35, buffer=25)
|
||||
22:07:00.890 LLM->TTS: text='踩ç�€é›ªæ�¿æˆ–者雪鞋,一æ¥ä¸€æ¥å¾€å‰�', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[105541 99164 100167 87531 100631 100167 102097 3837 117719 114796]
|
||||
22:07:01.042 TTS Simplex Phase1: token 50/500: rel_id=6453
|
||||
22:07:01.217 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 60, buffer=25)
|
||||
22:07:01.295 TTS Simplex Phase1: EOS token at step 65
|
||||
22:07:01.295 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 4 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:01.295 TTS Simplex: generated 64 audio tokens for chunk 6
|
||||
22:07:01.295 TTS Simplex: chunk 6 first tokens: [1377 3898 2513 4961 4869 ], last tokens: [5832 6084 4780 5672 3494 ]
|
||||
22:07:01.295 TTS Simplex: updated tts_n_past_accumulated=556, total_generated_tokens=479
|
||||
22:07:01.296 TTS<-LLM: chunk_idx=7, text='踩ç�€é›ªæ�¿æˆ–者雪鞋,一æ¥ä¸€æ¥å¾€å‰�', n_tokens=10, hidden_size=40960, token_ids=[105541 99164 100167 87531 100631 100167 102097 3837 117719 114796]
|
||||
22:07:01.296 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:07:01.296 TTS: before empty check - response.empty=0, response='踩ç�€é›ªæ�¿æˆ–者雪鞋,一æ¥ä¸€æ¥å¾€å‰�', llm_finish=0
|
||||
22:07:01.296 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:07:01.296 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:07:01.296 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:07:01.337 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_7/merged_embeddings.txt
|
||||
22:07:01.337 TTS Simplex: generating audio tokens for chunk 7 (n_tokens=10, tts_n_embd=768)
|
||||
22:07:01.337 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=7, new_size=11)
|
||||
22:07:01.337 TTS Simplex: chunk 7 - keeping KV cache, n_past_tts=556
|
||||
22:07:01.386 TTS Simplex: prefill completed, n_past_tts=567
|
||||
22:07:01.386 TTS Simplex: sampler created
|
||||
22:07:01.407 TTS Simplex Phase1: token 1/500: rel_id=4224
|
||||
22:07:01.425 TTS Simplex Phase1: token 2/500: rel_id=4218
|
||||
22:07:01.445 TTS Simplex Phase1: token 3/500: rel_id=3888
|
||||
22:07:01.463 TTS Simplex Phase1: token 4/500: rel_id=5835
|
||||
22:07:01.482 TTS Simplex Phase1: token 5/500: rel_id=5838
|
||||
22:07:01.765 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 21, buffer=25)
|
||||
22:07:01.839 TTS Simplex Phase1: token 25/500: rel_id=3658
|
||||
22:07:02.159 LLM->TTS: text='挪,呼哧呼哧喘�粗气', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[103477 3837 99592 120367 99592 120367 103425 99164 102187 99180]
|
||||
22:07:02.287 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 46, buffer=25)
|
||||
22:07:02.377 TTS Simplex Phase1: token 50/500: rel_id=71
|
||||
22:07:02.539 TTS Simplex Phase1: EOS token at step 58
|
||||
22:07:02.539 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 11 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:02.539 TTS Simplex: generated 57 audio tokens for chunk 7
|
||||
22:07:02.539 TTS Simplex: chunk 7 first tokens: [4224 4218 3888 5835 5838 ], last tokens: [4678 1295 314 35 4540 ]
|
||||
22:07:02.539 TTS Simplex: updated tts_n_past_accumulated=624, total_generated_tokens=536
|
||||
22:07:02.542 TTS<-LLM: chunk_idx=8, text='挪,呼哧呼哧喘�粗气', n_tokens=10, hidden_size=40960, token_ids=[103477 3837 99592 120367 99592 120367 103425 99164 102187 99180]
|
||||
22:07:02.542 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:07:02.542 TTS: before empty check - response.empty=0, response='挪,呼哧呼哧喘�粗气', llm_finish=0
|
||||
22:07:02.542 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:07:02.542 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:07:02.542 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:07:02.591 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_8/merged_embeddings.txt
|
||||
22:07:02.591 TTS Simplex: generating audio tokens for chunk 8 (n_tokens=10, tts_n_embd=768)
|
||||
22:07:02.591 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=8, new_size=11)
|
||||
22:07:02.591 TTS Simplex: chunk 8 - keeping KV cache, n_past_tts=624
|
||||
22:07:02.643 TTS Simplex: prefill completed, n_past_tts=635
|
||||
22:07:02.643 TTS Simplex: sampler created
|
||||
22:07:02.668 TTS Simplex Phase1: token 1/500: rel_id=3009
|
||||
22:07:02.692 TTS Simplex Phase1: token 2/500: rel_id=1707
|
||||
22:07:02.712 TTS Simplex Phase1: token 3/500: rel_id=5838
|
||||
22:07:02.737 TTS Simplex Phase1: token 4/500: rel_id=5109
|
||||
22:07:02.758 TTS Simplex Phase1: token 5/500: rel_id=2922
|
||||
22:07:02.965 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 14, buffer=25)
|
||||
22:07:03.118 T2W线程: wav_2.wav | 1.00s audio | 3465.6ms inference | RTF=3.47 | t=12250ms
|
||||
22:07:03.198 TTS Simplex Phase1: token 25/500: rel_id=3599
|
||||
22:07:03.466 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 39, buffer=25)
|
||||
22:07:03.534 LLM->TTS: text='。抬头看天,全是星星,连北�', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[1773 108149 50930 35727 3837 108743 109014 3837 54926 113081]
|
||||
22:07:03.671 TTS Simplex Phase1: token 50/500: rel_id=3579
|
||||
22:07:03.928 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 64, buffer=25)
|
||||
22:07:04.076 TTS Simplex Phase1: EOS token at step 73
|
||||
22:07:04.076 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 8 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:04.076 TTS Simplex: generated 72 audio tokens for chunk 8
|
||||
22:07:04.076 TTS Simplex: chunk 8 first tokens: [3009 1707 5838 5109 2922 ], last tokens: [3144 5970 4293 3493 1541 ]
|
||||
22:07:04.076 TTS Simplex: updated tts_n_past_accumulated=707, total_generated_tokens=608
|
||||
22:07:04.078 TTS<-LLM: chunk_idx=9, text='。抬头看天,全是星星,连北�', n_tokens=10, hidden_size=40960, token_ids=[1773 108149 50930 35727 3837 108743 109014 3837 54926 113081]
|
||||
22:07:04.078 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:07:04.078 TTS: before empty check - response.empty=0, response='。抬头看天,全是星星,连北�', llm_finish=0
|
||||
22:07:04.078 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:07:04.078 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:07:04.078 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:07:04.125 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_9/merged_embeddings.txt
|
||||
22:07:04.125 TTS Simplex: generating audio tokens for chunk 9 (n_tokens=10, tts_n_embd=768)
|
||||
22:07:04.125 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=9, new_size=11)
|
||||
22:07:04.125 TTS Simplex: chunk 9 - keeping KV cache, n_past_tts=707
|
||||
22:07:04.174 TTS Simplex: prefill completed, n_past_tts=718
|
||||
22:07:04.174 TTS Simplex: sampler created
|
||||
22:07:04.193 TTS Simplex Phase1: token 1/500: rel_id=1645
|
||||
22:07:04.210 TTS Simplex Phase1: token 2/500: rel_id=1605
|
||||
22:07:04.229 TTS Simplex Phase1: token 3/500: rel_id=140
|
||||
22:07:04.248 TTS Simplex Phase1: token 4/500: rel_id=3468
|
||||
22:07:04.267 TTS Simplex Phase1: token 5/500: rel_id=4915
|
||||
22:07:04.501 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 17, buffer=25)
|
||||
22:07:04.649 TTS Simplex Phase1: token 25/500: rel_id=4299
|
||||
22:07:04.729 LLM->TTS: text='光都能看�,那�一个美��过', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[99225 104297 104356 3837 99212 99882 46944 57566 6313 100632]
|
||||
22:07:04.967 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 42, buffer=25)
|
||||
22:07:05.113 TTS Simplex Phase1: token 50/500: rel_id=6486
|
||||
22:07:05.463 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 67, buffer=25)
|
||||
22:07:05.467 TTS Simplex Phase1: EOS token at step 68
|
||||
22:07:05.467 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 0 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:05.467 TTS Simplex: generated 67 audio tokens for chunk 9
|
||||
22:07:05.467 TTS Simplex: chunk 9 first tokens: [1645 1605 140 3468 4915 ], last tokens: [4509 4615 4444 5645 5645 ]
|
||||
22:07:05.467 TTS Simplex: updated tts_n_past_accumulated=785, total_generated_tokens=675
|
||||
22:07:05.468 TTS<-LLM: chunk_idx=10, text='光都能看�,那�一个美��过', n_tokens=10, hidden_size=40960, token_ids=[99225 104297 104356 3837 99212 99882 46944 57566 6313 100632]
|
||||
22:07:05.468 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:07:05.468 TTS: before empty check - response.empty=0, response='光都能看�,那�一个美��过', llm_finish=0
|
||||
22:07:05.469 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:07:05.469 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:07:05.469 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:07:05.512 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_10/merged_embeddings.txt
|
||||
22:07:05.512 TTS Simplex: generating audio tokens for chunk 10 (n_tokens=10, tts_n_embd=768)
|
||||
22:07:05.512 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=10, new_size=11)
|
||||
22:07:05.512 TTS Simplex: chunk 10 - keeping KV cache, n_past_tts=785
|
||||
22:07:05.569 TTS Simplex: prefill completed, n_past_tts=796
|
||||
22:07:05.569 TTS Simplex: sampler created
|
||||
22:07:05.595 TTS Simplex Phase1: token 1/500: rel_id=322
|
||||
22:07:05.615 TTS Simplex Phase1: token 2/500: rel_id=4967
|
||||
22:07:05.640 TTS Simplex Phase1: token 3/500: rel_id=6098
|
||||
22:07:05.660 TTS Simplex Phase1: token 4/500: rel_id=5534
|
||||
22:07:05.679 TTS Simplex Phase1: token 5/500: rel_id=4444
|
||||
22:07:06.070 LLM->TTS: text='呢,也挺难的,å�ƒé¥å¾—é� ', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[101036 3837 74763 101174 99349 9370 3837 104636 49828 99904]
|
||||
22:07:06.117 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 25, buffer=25)
|
||||
22:07:06.117 TTS Simplex Phase1: token 25/500: rel_id=2381
|
||||
22:07:06.488 T2W线程: wav_3.wav | 1.00s audio | 3359.0ms inference | RTF=3.36 | t=15621ms
|
||||
22:07:06.673 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 50, buffer=25)
|
||||
22:07:06.673 TTS Simplex Phase1: token 50/500: rel_id=751
|
||||
22:07:07.175 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 75, buffer=25)
|
||||
22:07:07.175 TTS Simplex Phase1: token 75/500: rel_id=5669
|
||||
22:07:07.281 TTS Simplex Phase1: EOS token at step 81
|
||||
22:07:07.281 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 5 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:07.281 TTS Simplex: generated 80 audio tokens for chunk 10
|
||||
22:07:07.281 TTS Simplex: chunk 10 first tokens: [322 4967 6098 5534 4444 ], last tokens: [1456 183 5078 4311 4068 ]
|
||||
22:07:07.281 TTS Simplex: updated tts_n_past_accumulated=876, total_generated_tokens=755
|
||||
22:07:07.282 TTS<-LLM: chunk_idx=11, text='呢,也挺难的,å�ƒé¥å¾—é� ', n_tokens=10, hidden_size=40960, token_ids=[101036 3837 74763 101174 99349 9370 3837 104636 49828 99904]
|
||||
22:07:07.282 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:07:07.282 TTS: before empty check - response.empty=0, response='呢,也挺难的,å�ƒé¥å¾—é� ', llm_finish=0
|
||||
22:07:07.282 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:07:07.282 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:07:07.282 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:07:07.326 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_11/merged_embeddings.txt
|
||||
22:07:07.326 TTS Simplex: generating audio tokens for chunk 11 (n_tokens=10, tts_n_embd=768)
|
||||
22:07:07.326 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=11, new_size=11)
|
||||
22:07:07.326 TTS Simplex: chunk 11 - keeping KV cache, n_past_tts=876
|
||||
22:07:07.369 LLM->TTS: text='å�£å“¨ï¼Œå› 为风声太大,说è¯�å�¬', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[39426 109760 3837 99519 99208 70074 102791 3837 104283 49187]
|
||||
22:07:07.384 TTS Simplex: prefill completed, n_past_tts=887
|
||||
22:07:07.384 TTS Simplex: sampler created
|
||||
22:07:07.406 TTS Simplex Phase1: token 1/500: rel_id=2273
|
||||
22:07:07.427 TTS Simplex Phase1: token 2/500: rel_id=8
|
||||
22:07:07.447 TTS Simplex Phase1: token 3/500: rel_id=278
|
||||
22:07:07.468 TTS Simplex Phase1: token 4/500: rel_id=386
|
||||
22:07:07.489 TTS Simplex Phase1: token 5/500: rel_id=1115
|
||||
22:07:07.792 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 20, buffer=25)
|
||||
22:07:07.894 TTS Simplex Phase1: token 25/500: rel_id=4862
|
||||
22:07:08.301 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 45, buffer=25)
|
||||
22:07:08.404 TTS Simplex Phase1: token 50/500: rel_id=1833
|
||||
22:07:08.611 LLM->TTS: text='ä¸�清。å��那儿å�ƒç‚¹çƒæ±¤ï¼Œæš–', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[106122 1773 99901 112358 99405 27442 99259 102022 3837 99856]
|
||||
22:07:08.684 TTS Simplex Phase1: EOS token at step 66
|
||||
22:07:08.684 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 20 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:08.684 TTS Simplex: generated 65 audio tokens for chunk 11
|
||||
22:07:08.684 TTS Simplex: chunk 11 first tokens: [2273 8 278 386 1115 ], last tokens: [2922 2112 2949 6048 5319 ]
|
||||
22:07:08.684 TTS Simplex: updated tts_n_past_accumulated=952, total_generated_tokens=820
|
||||
22:07:08.694 TTS<-LLM: chunk_idx=12, text='å�£å“¨ï¼Œå› 为风声太大,说è¯�å�¬', n_tokens=10, hidden_size=40960, token_ids=[39426 109760 3837 99519 99208 70074 102791 3837 104283 49187]
|
||||
22:07:08.694 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:07:08.694 TTS: before empty check - response.empty=0, response='å�£å“¨ï¼Œå› 为风声太大,说è¯�å�¬', llm_finish=0
|
||||
22:07:08.695 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:07:08.695 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:07:08.695 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:07:08.740 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_12/merged_embeddings.txt
|
||||
22:07:08.741 TTS Simplex: generating audio tokens for chunk 12 (n_tokens=10, tts_n_embd=768)
|
||||
22:07:08.741 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=12, new_size=11)
|
||||
22:07:08.741 TTS Simplex: chunk 12 - keeping KV cache, n_past_tts=952
|
||||
22:07:08.805 TTS Simplex: prefill completed, n_past_tts=963
|
||||
22:07:08.805 TTS Simplex: sampler created
|
||||
22:07:08.827 TTS Simplex Phase1: token 1/500: rel_id=795
|
||||
22:07:08.850 TTS Simplex Phase1: token 2/500: rel_id=3875
|
||||
22:07:08.876 TTS Simplex Phase1: token 3/500: rel_id=4275
|
||||
22:07:08.899 TTS Simplex Phase1: token 4/500: rel_id=6534
|
||||
22:07:08.920 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 5, buffer=25)
|
||||
22:07:08.920 TTS Simplex Phase1: token 5/500: rel_id=5510
|
||||
22:07:09.411 TTS Simplex Phase1: token 25/500: rel_id=5294
|
||||
22:07:09.521 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 30, buffer=25)
|
||||
22:07:09.941 T2W线程: wav_4.wav | 1.00s audio | 3451.6ms inference | RTF=3.45 | t=19074ms
|
||||
22:07:10.007 TTS Simplex Phase1: token 50/500: rel_id=5962
|
||||
22:07:10.087 LLM->TTS: text='暖身å�,å†�看看远处的冰山,', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[99856 108233 3837 87256 101997 103388 9370 100038 57811 3837]
|
||||
22:07:10.101 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 55, buffer=25)
|
||||
22:07:10.245 TTS Simplex Phase1: EOS token at step 66
|
||||
22:07:10.245 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 10 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:10.245 TTS Simplex: generated 65 audio tokens for chunk 12
|
||||
22:07:10.245 TTS Simplex: chunk 12 first tokens: [795 3875 4275 6534 5510 ], last tokens: [2249 876 549 5192 6077 ]
|
||||
22:07:10.245 TTS Simplex: updated tts_n_past_accumulated=1028, total_generated_tokens=885
|
||||
22:07:10.255 TTS<-LLM: chunk_idx=13, text='ä¸�清。å��那儿å�ƒç‚¹çƒæ±¤ï¼Œæš–', n_tokens=10, hidden_size=40960, token_ids=[106122 1773 99901 112358 99405 27442 99259 102022 3837 99856]
|
||||
22:07:10.255 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:07:10.255 TTS: before empty check - response.empty=0, response='ä¸�清。å��那儿å�ƒç‚¹çƒæ±¤ï¼Œæš–', llm_finish=0
|
||||
22:07:10.255 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:07:10.255 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:07:10.255 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:07:10.300 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_13/merged_embeddings.txt
|
||||
22:07:10.300 TTS Simplex: generating audio tokens for chunk 13 (n_tokens=10, tts_n_embd=768)
|
||||
22:07:10.300 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=13, new_size=11)
|
||||
22:07:10.300 TTS Simplex: chunk 13 - keeping KV cache, n_past_tts=1028
|
||||
22:07:10.362 TTS Simplex: prefill completed, n_past_tts=1039
|
||||
22:07:10.362 TTS Simplex: sampler created
|
||||
22:07:10.382 TTS Simplex Phase1: token 1/500: rel_id=3890
|
||||
22:07:10.401 TTS Simplex Phase1: token 2/500: rel_id=1703
|
||||
22:07:10.422 TTS Simplex Phase1: token 3/500: rel_id=3889
|
||||
22:07:10.439 TTS Simplex Phase1: token 4/500: rel_id=2025
|
||||
22:07:10.460 TTS Simplex Phase1: token 5/500: rel_id=3648
|
||||
22:07:10.651 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 15, buffer=25)
|
||||
22:07:10.847 TTS Simplex Phase1: token 25/500: rel_id=3603
|
||||
22:07:11.138 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 40, buffer=25)
|
||||
22:07:11.335 TTS Simplex Phase1: token 50/500: rel_id=2459
|
||||
22:07:11.380 LLM->TTS: text='é‚£æ‰�å�«è¿‡ç˜¾ï¼�ä½ è¯´è¿™åœ°æ–¹è�’', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[99212 99306 99882 38182 108886 6313 105665 43288 100371 101293]
|
||||
22:07:11.553 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 65, buffer=25)
|
||||
22:07:11.600 TTS Simplex Phase1: EOS token at step 69
|
||||
22:07:11.600 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 3 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:11.600 TTS Simplex: generated 68 audio tokens for chunk 13
|
||||
22:07:11.600 TTS Simplex: chunk 13 first tokens: [3890 1703 3889 2025 3648 ], last tokens: [881 3714 6069 4852 2216 ]
|
||||
22:07:11.600 TTS Simplex: updated tts_n_past_accumulated=1107, total_generated_tokens=953
|
||||
22:07:11.601 TTS<-LLM: chunk_idx=14, text='暖身å�,å†�看看远处的冰山,', n_tokens=10, hidden_size=40960, token_ids=[99856 108233 3837 87256 101997 103388 9370 100038 57811 3837]
|
||||
22:07:11.601 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:07:11.601 TTS: before empty check - response.empty=0, response='暖身å�,å†�看看远处的冰山,', llm_finish=0
|
||||
22:07:11.601 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:07:11.601 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:07:11.601 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:07:11.642 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_14/merged_embeddings.txt
|
||||
22:07:11.642 TTS Simplex: generating audio tokens for chunk 14 (n_tokens=10, tts_n_embd=768)
|
||||
22:07:11.642 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=14, new_size=11)
|
||||
22:07:11.642 TTS Simplex: chunk 14 - keeping KV cache, n_past_tts=1107
|
||||
22:07:11.710 TTS Simplex: prefill completed, n_past_tts=1118
|
||||
22:07:11.710 TTS Simplex: sampler created
|
||||
22:07:11.730 TTS Simplex Phase1: token 1/500: rel_id=1275
|
||||
22:07:11.747 TTS Simplex Phase1: token 2/500: rel_id=2187
|
||||
22:07:11.767 TTS Simplex Phase1: token 3/500: rel_id=6075
|
||||
22:07:11.785 TTS Simplex Phase1: token 4/500: rel_id=6086
|
||||
22:07:11.803 TTS Simplex Phase1: token 5/500: rel_id=5672
|
||||
22:07:12.201 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 22, buffer=25)
|
||||
22:07:12.277 TTS Simplex Phase1: token 25/500: rel_id=5322
|
||||
22:07:12.828 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 47, buffer=25)
|
||||
22:07:12.906 TTS Simplex Phase1: token 50/500: rel_id=1725
|
||||
22:07:12.998 LLM->TTS: text='��?�就是这�,�让人', n_tokens=10, hidden_size=40960, n_embd=4096, token_ids=[16530 101293 11319 30440 99486 43288 101293 3837 99306 103973]
|
||||
22:07:13.118 T2W线程: wav_5.wav | 1.00s audio | 3175.7ms inference | RTF=3.18 | t=22250ms
|
||||
22:07:13.219 TTS Simplex Phase1: EOS token at step 68
|
||||
22:07:13.219 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 20 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:13.219 TTS Simplex: generated 67 audio tokens for chunk 14
|
||||
22:07:13.219 TTS Simplex: chunk 14 first tokens: [1275 2187 6075 6086 5672 ], last tokens: [1125 306 2243 2163 1686 ]
|
||||
22:07:13.219 TTS Simplex: updated tts_n_past_accumulated=1185, total_generated_tokens=1020
|
||||
22:07:13.220 TTS<-LLM: chunk_idx=15, text='é‚£æ‰�å�«è¿‡ç˜¾ï¼�ä½ è¯´è¿™åœ°æ–¹è�’', n_tokens=10, hidden_size=40960, token_ids=[99212 99306 99882 38182 108886 6313 105665 43288 100371 101293]
|
||||
22:07:13.220 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:07:13.220 TTS: before empty check - response.empty=0, response='é‚£æ‰�å�«è¿‡ç˜¾ï¼�ä½ è¯´è¿™åœ°æ–¹è�’', llm_finish=0
|
||||
22:07:13.220 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:07:13.220 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:07:13.220 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:07:13.258 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_15/merged_embeddings.txt
|
||||
22:07:13.259 TTS Simplex: generating audio tokens for chunk 15 (n_tokens=10, tts_n_embd=768)
|
||||
22:07:13.259 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=15, new_size=11)
|
||||
22:07:13.259 TTS Simplex: chunk 15 - keeping KV cache, n_past_tts=1185
|
||||
22:07:13.332 TTS Simplex: prefill completed, n_past_tts=1196
|
||||
22:07:13.332 TTS Simplex: sampler created
|
||||
22:07:13.352 TTS Simplex Phase1: token 1/500: rel_id=5021
|
||||
22:07:13.369 TTS Simplex Phase1: token 2/500: rel_id=4967
|
||||
22:07:13.389 TTS Simplex Phase1: token 3/500: rel_id=6424
|
||||
22:07:13.409 TTS Simplex Phase1: token 4/500: rel_id=5560
|
||||
22:07:13.429 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 5, buffer=25)
|
||||
22:07:13.429 TTS Simplex Phase1: token 5/500: rel_id=6048
|
||||
22:07:13.834 TTS Simplex Phase1: token 25/500: rel_id=138
|
||||
22:07:13.939 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 30, buffer=25)
|
||||
22:07:14.017 LLM: detected end token, set llm_generation_done=true
|
||||
22:07:14.017 LLM->TTS: text='觉得活�真痛快�', n_tokens=6, hidden_size=24576, n_embd=4096, token_ids=[99801 107473 88051 100406 99234 6313]
|
||||
22:07:14.245 TTS Simplex Phase1: token 50/500: rel_id=6486
|
||||
22:07:14.320 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 55, buffer=25)
|
||||
22:07:14.586 TTS Simplex Phase1: EOS token at step 74
|
||||
22:07:14.586 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 18 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:14.586 TTS Simplex: generated 73 audio tokens for chunk 15
|
||||
22:07:14.586 TTS Simplex: chunk 15 first tokens: [5021 4967 6424 5560 6048 ], last tokens: [5023 3159 1704 5835 735 ]
|
||||
22:07:14.586 TTS Simplex: updated tts_n_past_accumulated=1269, total_generated_tokens=1093
|
||||
22:07:14.596 TTS<-LLM: chunk_idx=16, text='��?�就是这�,�让人', n_tokens=10, hidden_size=40960, token_ids=[16530 101293 11319 30440 99486 43288 101293 3837 99306 103973]
|
||||
22:07:14.596 TTS: after queue pop - speek_done=0, llm_finish=0, llm_text.empty=0, token_ids.size=10
|
||||
22:07:14.596 TTS: before empty check - response.empty=0, response='��?�就是这�,�让人', llm_finish=0
|
||||
22:07:14.596 TTS: DEBUG before has_llm_data - token_ids.size=10, hidden_states.size=40960, n_embd=4096
|
||||
22:07:14.596 TTS: has_llm_data=1, token_ids=10, hidden_states=40960, n_embd=4096, llm_finish=0
|
||||
22:07:14.596 ðŸ“� Decode 结æ�Ÿ: n_past=348, 剩余空间=1700, æ— éœ€æ»‘çª—
|
||||
22:07:14.596 � 轮次 1 结�,记录边界于 n_past=348
|
||||
22:07:14.596 TTS: n_tokens_orig=10, n_tokens_filtered=10 (filtered 0 special tokens)
|
||||
22:07:14.635 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_16/merged_embeddings.txt
|
||||
22:07:14.635 TTS Simplex: generating audio tokens for chunk 16 (n_tokens=10, tts_n_embd=768)
|
||||
22:07:14.635 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=16, new_size=11)
|
||||
22:07:14.635 TTS Simplex: chunk 16 - keeping KV cache, n_past_tts=1269
|
||||
22:07:14.702 TTS Simplex: prefill completed, n_past_tts=1280
|
||||
22:07:14.702 TTS Simplex: sampler created
|
||||
22:07:14.721 TTS Simplex Phase1: token 1/500: rel_id=2112
|
||||
22:07:14.740 TTS Simplex Phase1: token 2/500: rel_id=4515
|
||||
22:07:14.758 TTS Simplex Phase1: token 3/500: rel_id=957
|
||||
22:07:14.774 TTS Simplex Phase1: token 4/500: rel_id=2327
|
||||
22:07:14.793 TTS Simplex Phase1: token 5/500: rel_id=1680
|
||||
22:07:14.831 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 7, buffer=25)
|
||||
22:07:15.001 � 为下一轮准备: eval <|im_end|>\n<|im_start|>user\n, n_past=353
|
||||
22:07:15.152 TTS Simplex Phase1: token 25/500: rel_id=728
|
||||
22:07:15.275 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 32, buffer=25)
|
||||
22:07:15.591 TTS Simplex Phase1: token 50/500: rel_id=5092
|
||||
22:07:15.722 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 57, buffer=25)
|
||||
22:07:15.916 TTS Simplex Phase1: EOS token at step 68
|
||||
22:07:15.916 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 10 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:15.916 TTS Simplex: generated 67 audio tokens for chunk 16
|
||||
22:07:15.916 TTS Simplex: chunk 16 first tokens: [2112 4515 957 2327 1680 ], last tokens: [5759 4865 4871 4961 1957 ]
|
||||
22:07:15.916 TTS Simplex: updated tts_n_past_accumulated=1347, total_generated_tokens=1160
|
||||
22:07:15.917 TTS<-LLM: chunk_idx=17, text='觉得活�真痛快�', n_tokens=6, hidden_size=24576, token_ids=[99801 107473 88051 100406 99234 6313]
|
||||
22:07:15.917 TTS: after queue pop - speek_done=0, llm_finish=1, llm_text.empty=0, token_ids.size=6
|
||||
22:07:15.917 TTS: before empty check - response.empty=0, response='觉得活�真痛快�', llm_finish=1
|
||||
22:07:15.917 TTS: DEBUG before has_llm_data - token_ids.size=6, hidden_states.size=24576, n_embd=4096
|
||||
22:07:15.917 TTS: has_llm_data=1, token_ids=6, hidden_states=24576, n_embd=4096, llm_finish=1
|
||||
22:07:15.917 TTS: n_tokens_orig=6, n_tokens_filtered=6 (filtered 0 special tokens)
|
||||
22:07:15.940 T2W线程: wav_6.wav | 1.00s audio | 2821.9ms inference | RTF=2.82 | t=25073ms
|
||||
22:07:15.951 TTS: saved merged embeddings (text) to ./tools/omni/output/round_000/llm_debug/chunk_17/merged_embeddings.txt
|
||||
22:07:15.951 TTS Simplex: generating audio tokens for chunk 17 (n_tokens=6, tts_n_embd=768)
|
||||
22:07:15.951 TTS Simplex: 在 prefill å‰�æ·»åŠ audio_bos (chunk_idx=17, new_size=7)
|
||||
22:07:15.951 TTS Simplex: chunk 17 - keeping KV cache, n_past_tts=1347
|
||||
22:07:15.990 TTS Simplex: prefill completed, n_past_tts=1354
|
||||
22:07:15.990 TTS Simplex: sampler created
|
||||
22:07:16.005 TTS Simplex Phase1: token 1/500: rel_id=4134
|
||||
22:07:16.019 TTS Simplex Phase1: token 2/500: rel_id=5835
|
||||
22:07:16.033 TTS Simplex Phase1: token 3/500: rel_id=5838
|
||||
22:07:16.047 TTS Simplex Phase1: token 4/500: rel_id=3651
|
||||
22:07:16.061 TTS Simplex Phase1: token 5/500: rel_id=1869
|
||||
22:07:16.210 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 15, buffer=25)
|
||||
22:07:16.357 TTS Simplex Phase1: token 25/500: rel_id=4520
|
||||
22:07:16.584 TTS Simplex Phase1: yield 25 tokens 到 T2W (step 40, buffer=25)
|
||||
22:07:16.732 TTS Simplex Phase1: token 50/500: rel_id=4956
|
||||
22:07:16.809 TTS Simplex Phase1: EOS token at step 56
|
||||
22:07:16.809 TTS Simplex: is_final_text_chunk=true, will enter Phase 2 for text_eos_embed
|
||||
22:07:16.810 TTS Simplex Phase2: injecting text_eos_embed + audio_bos at n_past=1409
|
||||
22:07:16.821 TTS Simplex Phase2: text_eos_embed injected, n_past=1410
|
||||
22:07:16.833 TTS Simplex Phase2: audio_bos injected, n_past=1411, starting final generation
|
||||
22:07:16.982 TTS Simplex Phase2: yield 25 tokens 到 T2W
|
||||
22:07:17.013 TTS Simplex Phase2: EOS at step 12 (final end)
|
||||
22:07:17.013 TTS Simplex: chunk 结æ�Ÿï¼Œtts_token_buffer 剩余 1 tokens (ä¿�ç•™ç‰ä¸‹ä¸€ä¸ª chunk)
|
||||
22:07:17.013 TTS Simplex: is_final_text_chunk=true, flush 剩余 1 tokens 从 tts_token_buffer
|
||||
22:07:17.013 TTS Simplex: generated 66 audio tokens for chunk 17
|
||||
22:07:17.013 TTS Simplex: chunk 17 first tokens: [4134 5835 5838 3651 1869 ], last tokens: [4299 6486 6486 4299 4218 ]
|
||||
22:07:17.013 TTS Simplex: updated tts_n_past_accumulated=1423, total_generated_tokens=1226
|
||||
22:07:17.013 TTS: finished processing all chunks
|
||||
22:07:17.014 TTS: �工模�轮次结�,下一轮 round_idx=1
|
||||
22:07:17.014 TTS: sent is_final=true to T2W queue (turn end)
|
||||
22:07:18.320 T2W线程: wav_7.wav | 1.00s audio | 2378.7ms inference | RTF=2.38 | t=27452ms
|
||||
22:07:20.546 T2W线程: wav_8.wav | 1.00s audio | 2225.5ms inference | RTF=2.23 | t=29679ms
|
||||
22:07:22.778 T2W线程: wav_9.wav | 1.00s audio | 2231.2ms inference | RTF=2.23 | t=31911ms
|
||||
22:07:24.992 T2W线程: wav_10.wav | 1.00s audio | 2212.8ms inference | RTF=2.21 | t=34124ms
|
||||
22:07:27.195 T2W线程: wav_11.wav | 1.00s audio | 2202.2ms inference | RTF=2.20 | t=36327ms
|
||||
22:07:29.409 T2W线程: wav_12.wav | 1.00s audio | 2213.6ms inference | RTF=2.21 | t=38542ms
|
||||
22:07:31.621 T2W线程: wav_13.wav | 1.00s audio | 2202.8ms inference | RTF=2.20 | t=40754ms
|
||||
22:07:33.834 T2W线程: wav_14.wav | 1.00s audio | 2212.8ms inference | RTF=2.21 | t=42967ms
|
||||
22:07:36.040 T2W线程: wav_15.wav | 1.00s audio | 2204.7ms inference | RTF=2.20 | t=45172ms
|
||||
22:07:38.231 T2W线程: wav_16.wav | 1.00s audio | 2190.5ms inference | RTF=2.19 | t=47364ms
|
||||
22:07:40.443 T2W线程: wav_17.wav | 1.00s audio | 2211.2ms inference | RTF=2.21 | t=49576ms
|
||||
22:07:42.643 T2W线程: wav_18.wav | 1.00s audio | 2199.0ms inference | RTF=2.20 | t=51775ms
|
||||
22:07:44.876 T2W线程: wav_19.wav | 1.00s audio | 2232.0ms inference | RTF=2.23 | t=54008ms
|
||||
22:07:47.081 T2W线程: wav_20.wav | 1.00s audio | 2204.1ms inference | RTF=2.20 | t=56213ms
|
||||
22:07:49.285 T2W线程: wav_21.wav | 1.00s audio | 2203.2ms inference | RTF=2.20 | t=58417ms
|
||||
22:07:51.493 T2W线程: wav_22.wav | 1.00s audio | 2207.2ms inference | RTF=2.21 | t=60626ms
|
||||
22:07:53.739 T2W线程: wav_23.wav | 1.00s audio | 2245.3ms inference | RTF=2.25 | t=62871ms
|
||||
22:07:55.957 T2W线程: wav_24.wav | 1.00s audio | 2217.0ms inference | RTF=2.22 | t=65089ms
|
||||
22:07:58.160 T2W线程: wav_25.wav | 1.00s audio | 2202.1ms inference | RTF=2.20 | t=67292ms
|
||||
22:08:00.374 T2W线程: wav_26.wav | 1.00s audio | 2213.6ms inference | RTF=2.21 | t=69507ms
|
||||
22:08:02.583 T2W线程: wav_27.wav | 1.00s audio | 2207.9ms inference | RTF=2.21 | t=71715ms
|
||||
22:08:04.798 T2W线程: wav_28.wav | 1.00s audio | 2214.3ms inference | RTF=2.21 | t=73930ms
|
||||
22:08:07.010 T2W线程: wav_29.wav | 1.00s audio | 2212.0ms inference | RTF=2.21 | t=76143ms
|
||||
22:08:09.207 T2W线程: wav_30.wav | 1.00s audio | 2195.5ms inference | RTF=2.20 | t=78339ms
|
||||
22:08:11.411 T2W线程: wav_31.wav | 1.00s audio | 2204.1ms inference | RTF=2.20 | t=80544ms
|
||||
22:08:13.633 T2W线程: wav_32.wav | 1.00s audio | 2221.1ms inference | RTF=2.22 | t=82766ms
|
||||
22:08:15.854 T2W线程: wav_33.wav | 1.00s audio | 2219.4ms inference | RTF=2.22 | t=84986ms
|
||||
22:08:18.066 T2W线程: wav_34.wav | 1.00s audio | 2211.6ms inference | RTF=2.21 | t=87199ms
|
||||
22:08:20.271 T2W线程: wav_35.wav | 1.00s audio | 2204.1ms inference | RTF=2.20 | t=89403ms
|
||||
22:08:22.473 T2W线程: wav_36.wav | 1.00s audio | 2201.2ms inference | RTF=2.20 | t=91605ms
|
||||
22:08:24.671 T2W线程: wav_37.wav | 1.00s audio | 2197.6ms inference | RTF=2.20 | t=93803ms
|
||||
22:08:26.865 T2W线程: wav_38.wav | 1.00s audio | 2193.4ms inference | RTF=2.19 | t=95998ms
|
||||
22:08:29.070 T2W线程: wav_39.wav | 1.00s audio | 2204.3ms inference | RTF=2.20 | t=98203ms
|
||||
22:08:31.262 T2W线程: wav_40.wav | 1.00s audio | 2190.6ms inference | RTF=2.19 | t=100394ms
|
||||
22:08:33.465 T2W线程: wav_41.wav | 1.00s audio | 2202.6ms inference | RTF=2.20 | t=102597ms
|
||||
22:08:35.674 T2W线程: wav_42.wav | 1.00s audio | 2208.7ms inference | RTF=2.21 | t=104807ms
|
||||
22:08:37.870 T2W线程: wav_43.wav | 1.00s audio | 2194.5ms inference | RTF=2.19 | t=107002ms
|
||||
22:08:40.069 T2W线程: wav_44.wav | 1.00s audio | 2198.0ms inference | RTF=2.20 | t=109201ms
|
||||
22:08:42.297 T2W线程: wav_45.wav | 1.00s audio | 2227.2ms inference | RTF=2.23 | t=111429ms
|
||||
22:08:44.495 T2W线程: wav_46.wav | 1.00s audio | 2197.0ms inference | RTF=2.20 | t=113627ms
|
||||
22:08:46.707 T2W线程: wav_47.wav | 1.00s audio | 2211.1ms inference | RTF=2.21 | t=115839ms
|
||||
22:08:48.916 T2W线程: wav_48.wav | 1.00s audio | 2208.5ms inference | RTF=2.21 | t=118048ms
|
||||
22:08:50.905 T2W线程: wav_49.wav | 0.32s audio | 1988.7ms inference | RTF=6.21 | t=120038ms
|
||||
22:08:50.905 T2W线程: 写入结æ�Ÿæ ‡è®° ./tools/omni/output/round_000/tts_wav/generation_done.flag (last_wav=49)
|
||||
22:08:50.905 T2W线程: 轮次结��更新输出目录为 ./tools/omni/output/round_001/tts_wav
|
||||
22:08:50.944 omni_stop_threads: stop signals sent
|
||||
22:08:50.944 T2W(C++) 线程: å�œæ¢
|
||||
tts thread end
|
||||
t2w thread end
|
||||
BIN
Binary file not shown.
+341
@@ -0,0 +1,341 @@
|
||||
{
|
||||
"scope": "standalone MiniCPM-o 4.5 GGUF audio+image input to text+speech on native-Windows-11-HX370-CPU",
|
||||
"status": "scoped_complete_path_pass",
|
||||
"quality": "synthetic red-square/tone response not established as semantically correct",
|
||||
"model_revision": "db25077c33951fe163b42986fba0132e279872a2",
|
||||
"artifacts": {
|
||||
"MiniCPM-o-4_5-Q4_K_M.gguf": {
|
||||
"bytes": 5026714400,
|
||||
"sha256": "1237a97ee081b8abebc47aa7dad565701e8f5f904cdc92f6723ac4281bbc0932"
|
||||
},
|
||||
"audio/MiniCPM-o-4_5-audio-F16.gguf": {
|
||||
"bytes": 660167904,
|
||||
"sha256": "d5b188ac7feaf98e17175c3f9bd14bf269301bfd187439fdaa3e3a494fc32ef7"
|
||||
},
|
||||
"vision/MiniCPM-o-4_5-vision-F16.gguf": {
|
||||
"bytes": 1095113184,
|
||||
"sha256": "1453678cc4e4fe18de241952962e234f265cb8dda780773526103ab8ba82f421"
|
||||
},
|
||||
"tts/MiniCPM-o-4_5-tts-F16.gguf": {
|
||||
"bytes": 1157244416,
|
||||
"sha256": "c7be3748a863dd6966ae7eed42600b7f41ca67affb03729ff245247f0e5ea088"
|
||||
},
|
||||
"tts/MiniCPM-o-4_5-projector-F16.gguf": {
|
||||
"bytes": 14948640,
|
||||
"sha256": "4b1b5b377358a5e594a304ff6ea5d52df606a9ba7d886c4299d232f0c67dd1fd"
|
||||
},
|
||||
"token2wav-gguf/encoder.gguf": {
|
||||
"bytes": 151339008,
|
||||
"sha256": "7f8d265da594eaf5e1de2db8f5f1867dbcb0bb75ef5878fadf2952347116f4d0"
|
||||
},
|
||||
"token2wav-gguf/flow_matching.gguf": {
|
||||
"bytes": 458250240,
|
||||
"sha256": "eda6069f3edeb5dd3a87fbf2aedb2ddd1b46f3273926c4fcf09b24476a39cab8"
|
||||
},
|
||||
"token2wav-gguf/flow_extra.gguf": {
|
||||
"bytes": 13663328,
|
||||
"sha256": "c67611aa7d02500fe395a7798bf0bfdfb55c74d37ba93934ca74d82b4e63f78d"
|
||||
},
|
||||
"token2wav-gguf/hifigan2.gguf": {
|
||||
"bytes": 83242816,
|
||||
"sha256": "1b8b3bf5d8d3066aeee4324fdcdd41aefce170d0ee907645858de408d82835c2"
|
||||
},
|
||||
"token2wav-gguf/prompt_cache.gguf": {
|
||||
"bytes": 211613152,
|
||||
"sha256": "81fe6f541ebe0b67db06a1e395df928da47991dc9637c2cf47d6c59d5b979f2c"
|
||||
}
|
||||
},
|
||||
"runtime_binary_sha256": "55eb866533dabe7e09ceba2c9174060b950b35a214f231e6908c55dce5ed78e8",
|
||||
"input_image_sha256": "22c7ccea466a3f551c512045e6316c7597408d4e0a20205502f55784d977aa8d",
|
||||
"input_audio_sha256": "cf4bb5cd9acbfbf67596d4a53310652b61ef4b7ede1d54eb03ef4882ca40223a",
|
||||
"response_text": "哎呀,这个问题挺有意思的!要是让我去一个完全没去过的地方,那我肯定得去北极啊!你想啊,那地方冰天雪地的,白茫茫的一片,连路都没有,走路都得小心翼翼的。但你说这地方多刺激!穿厚厚的羽绒服,戴上防风手套,脚底下踩着雪板或者雪鞋,一步一步往前挪,呼哧呼哧喘着粗气。抬头看天,全是星星,连北极光都能看见,那叫一个美!不过呢,也挺难的,吃饭得靠口哨,因为风声太大,说话听不清。坐那儿吃点热汤,暖暖身子,再看看远处的冰山,那才叫过瘾!你说这地方荒不荒?可就是这荒,才让人觉得活着真痛快!",
|
||||
"audio_chunks": [
|
||||
{
|
||||
"name": "wav_0.wav",
|
||||
"frames": 20160,
|
||||
"sha256": "ccaf11f4d508f6714ee40f6cbc10f0443ce3a5a1c817e1098c9492fde006e5ef"
|
||||
},
|
||||
{
|
||||
"name": "wav_1.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "24f4927c3ee76c1f3dbe530be2f9e409353694693fa200682b70a175ae043a45"
|
||||
},
|
||||
{
|
||||
"name": "wav_2.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "6d5e2017555de66b7b5d10f2d9405ab7aa838f4919f8cd481b50ad60144391a1"
|
||||
},
|
||||
{
|
||||
"name": "wav_3.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "80435ac30f252004b3d3aeda4a04add0948b8b200b7bcfb14059d3e7058425f7"
|
||||
},
|
||||
{
|
||||
"name": "wav_4.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "6573999fb18bb302e18a15e5716ca98ffd4f4d8860a107303886af47bd8f45c3"
|
||||
},
|
||||
{
|
||||
"name": "wav_5.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "1b2237ec3731e5cf3132c8ea0a0f1d4d050b5e26e99434092c76cde7818074a1"
|
||||
},
|
||||
{
|
||||
"name": "wav_6.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "824b4e215c9602087b993547361abc9657b8c8f39ab3cc24fbf3e724e8bd8a79"
|
||||
},
|
||||
{
|
||||
"name": "wav_7.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "fef914a2fe781eda722b07cfe0720776ee2e5a319c8229cda805285925e607bc"
|
||||
},
|
||||
{
|
||||
"name": "wav_8.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "0ce28877d81c1a760929495c3ba4369466c8ef1bf8f96e1df1a3e781a154dde2"
|
||||
},
|
||||
{
|
||||
"name": "wav_9.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "6601959926fe73677365ce3c5f650cf9cc88b0521af7e9cff7332a36ba5e1a05"
|
||||
},
|
||||
{
|
||||
"name": "wav_10.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "908c73e428c8d5558b2f6dbf3468e151bcae61a5ddc329a4b89bbc68917ccac4"
|
||||
},
|
||||
{
|
||||
"name": "wav_11.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "485b6d0a5bd286741de6252a1ce453117717e6171f707be9984767c82875cf8d"
|
||||
},
|
||||
{
|
||||
"name": "wav_12.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "a4121fd0b15a2755a80703c52859737df7fcbcb310f725cf504bedfb941b0605"
|
||||
},
|
||||
{
|
||||
"name": "wav_13.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "300623668516f1a049f1d99e5ade0b93e8a73deb298e9e04854b983f0fd76f81"
|
||||
},
|
||||
{
|
||||
"name": "wav_14.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "0a9a9a08eea009460590bb032d33edffe0153193e50c366a743ead46e2d0e2a9"
|
||||
},
|
||||
{
|
||||
"name": "wav_15.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "baab0f1f8d00de92073d4ffa9834ca7da9cedbf575f39f4a9cebde680381bcf0"
|
||||
},
|
||||
{
|
||||
"name": "wav_16.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "af52c89f21ac5f948e33787e605df8e883579632f1036ea6bcdbd9c7a8fbdcda"
|
||||
},
|
||||
{
|
||||
"name": "wav_17.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "ec70aa4c48e88ffed9505a68058b499b58ca4adc8ea6644a4799ab144997f405"
|
||||
},
|
||||
{
|
||||
"name": "wav_18.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "cec1bc909334fcc6de69af4a826f9fc77425077e33990b7b532ca25910adb01c"
|
||||
},
|
||||
{
|
||||
"name": "wav_19.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "cb5423b0db3a5528470da14b21eee3dd465daf243378e067c4d976e1876c387b"
|
||||
},
|
||||
{
|
||||
"name": "wav_20.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "bb48ff18018f36906ff8bcac0291444b1000d2fee6ec928f82d916b96f3eaa81"
|
||||
},
|
||||
{
|
||||
"name": "wav_21.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "3ef0c77893e626ea65aed16aff60034b960d633c6bb175350ebb27cfebe7c3c3"
|
||||
},
|
||||
{
|
||||
"name": "wav_22.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "44751508ac8a2f6a5e00744c8025eccd4f47f950b5c8fda3d9aac896594a9e77"
|
||||
},
|
||||
{
|
||||
"name": "wav_23.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "14520c03ab4e42f4477003de37394f634d0159f34416c8a977614d2ba17bab29"
|
||||
},
|
||||
{
|
||||
"name": "wav_24.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "a8897359ccf0fe7209747b1969c040697f84e6cbd2bfb9af0812802e937f250c"
|
||||
},
|
||||
{
|
||||
"name": "wav_25.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "8a558610b0452664e8426bd52e18d939d5b8a6e5cb30f716b50b0085b1ff53c6"
|
||||
},
|
||||
{
|
||||
"name": "wav_26.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "ebb83e4ce6c6c5e38af3e4efe1052ec36650a7b45b7110e7ad4c1ee7eaadff85"
|
||||
},
|
||||
{
|
||||
"name": "wav_27.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "571c311f90e702ccc36710282d6fe076facbe6d7d9cce0e75fef3a0aec182465"
|
||||
},
|
||||
{
|
||||
"name": "wav_28.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "963516c1d2997c807577d4e6f070442a9ef245e9abdfb0c59d38e1586cfd03cd"
|
||||
},
|
||||
{
|
||||
"name": "wav_29.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "95895af80fe40af98a478470a7e2bbad628af3bf21ae584326aa861116a41c24"
|
||||
},
|
||||
{
|
||||
"name": "wav_30.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "417baf3112430c5d91b72ebb7719c62516f7a22941895a42ced4480eb61e22d8"
|
||||
},
|
||||
{
|
||||
"name": "wav_31.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "0cea7e377d403c76bdd5239338a86c9d7c256ce88bb6a07aa5e890f71d9dc72d"
|
||||
},
|
||||
{
|
||||
"name": "wav_32.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "22019ed1005e7c8c804f31075ad3b44b24dbf518f9a32df2e3fdf6b46aa93b1e"
|
||||
},
|
||||
{
|
||||
"name": "wav_33.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "450c5669164ed7907e9349284d4a13af87e59b7767545de71521d84dd4ab505e"
|
||||
},
|
||||
{
|
||||
"name": "wav_34.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "f7afa07c68e4015d79e14dfabb819c8e77940e395546730567b01f74b902ff2d"
|
||||
},
|
||||
{
|
||||
"name": "wav_35.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "e5059b3194c5388d78e5fa0bf62f21ef311e5fd6e2d68f27728bde89dafa26ca"
|
||||
},
|
||||
{
|
||||
"name": "wav_36.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "5dfb632767047359bc87b2cc4c1b832043742c1ff38ddb309f77bcb9564c99bf"
|
||||
},
|
||||
{
|
||||
"name": "wav_37.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "b8b3a87ec594ba197964e01340d4f67d57b0ad1bb892c8f7b6e2ccac61790955"
|
||||
},
|
||||
{
|
||||
"name": "wav_38.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "06aeeebd73a91f80f7259cd69e70c95aad06eccd5dafa57cfdee49d12ea765cf"
|
||||
},
|
||||
{
|
||||
"name": "wav_39.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "d19073d56e22d2498d5d88ed53c6129773db0c88629770cebe2822e17c1dd10f"
|
||||
},
|
||||
{
|
||||
"name": "wav_40.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "674f787916d660663af553222e6f7475de281150e45442b17bacd086f92539a9"
|
||||
},
|
||||
{
|
||||
"name": "wav_41.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "bb712e6f0962193139dcef6bc32b14806fb95bfe50d0233a80bc3074767a5747"
|
||||
},
|
||||
{
|
||||
"name": "wav_42.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "17cf982832ae9495d57ae0ddc6062a9a371bded22843bf47528053a7e7feec6c"
|
||||
},
|
||||
{
|
||||
"name": "wav_43.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "605c0400cfe18ef70c5df7aa4444352f260fd111715c59857c2759e72215219c"
|
||||
},
|
||||
{
|
||||
"name": "wav_44.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "737571d20af2ab45afe8794de001ad5f8005e8726999cc03541d1efb2bb009b1"
|
||||
},
|
||||
{
|
||||
"name": "wav_45.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "ff061aad11f2079d6262060581e9a692391b024f5344e3f9cdb01e4ae5b8e4e2"
|
||||
},
|
||||
{
|
||||
"name": "wav_46.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "b7fcad9b9e0a175343089b3ab4e84c5659fd683139ef82a3c72a8a5c6ed1af11"
|
||||
},
|
||||
{
|
||||
"name": "wav_47.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "3ece4590e97ed99ffd2ab023a5916f7acb48c5428a6e109dc568ee9da4d525ba"
|
||||
},
|
||||
{
|
||||
"name": "wav_48.wav",
|
||||
"frames": 24000,
|
||||
"sha256": "4e5d26b5a0d61000c3c6394fa7f7ff6ef912726382668704b0e65ccfea82a29a"
|
||||
},
|
||||
{
|
||||
"name": "wav_49.wav",
|
||||
"frames": 7680,
|
||||
"sha256": "bd7c0b1674ff6cebcd2c9fa5dc3aac7fa75e72eb141c87b3c1635e848b14a510"
|
||||
}
|
||||
],
|
||||
"audio_frames": 1179840,
|
||||
"audio_duration_s": 49.16,
|
||||
"audio_rms_pcm16": 2572.517821545514,
|
||||
"pcm_sha256": "f24c45ec32bb0b7d32486546e91148f41b8348d563bbc8fc2c6e8babb3da098a",
|
||||
"merged_wav_sha256": "a38e7fdea006f4b785b8ee857aeb4c3b4b0f4a7a2039c6e34f6723c105c8da02",
|
||||
"peak_rss_kib_from_time": null,
|
||||
"wall_clock_from_time": null,
|
||||
"sampled_process_profile": {
|
||||
"command": [
|
||||
"C:\\Users\\zhout\\w2\\minicpmo_cpp_cpu_v3\\llama-omni-cli.exe",
|
||||
"-m",
|
||||
"C:\\Users\\zhout\\w2\\models\\MiniCPM-o-4_5-gguf\\MiniCPM-o-4_5-Q4_K_M.gguf",
|
||||
"-ngl",
|
||||
"0",
|
||||
"-c",
|
||||
"2048",
|
||||
"--omni",
|
||||
"--t2w-device",
|
||||
"cpu",
|
||||
"--t2w-wait-seconds",
|
||||
"900",
|
||||
"--ref-audio",
|
||||
"C:\\Users\\zhout\\w2\\minicpmo_cpp_cpu_v3\\default_ref_audio.wav",
|
||||
"--test",
|
||||
"C:\\Users\\zhout\\w2\\minicpmo_cpp_cpu_v3\\fixture_",
|
||||
"2"
|
||||
],
|
||||
"cwd": "C:\\Users\\zhout\\w2\\minicpmo_cpp_cpu_v3",
|
||||
"exit_code": 0,
|
||||
"wall_s": 137.33765170001425,
|
||||
"memory_sample_interval_ms": 100,
|
||||
"memory_samples": 1365,
|
||||
"peak_sampled_rss_bytes": 13104742400,
|
||||
"peak_sampled_private_bytes": 13314060288,
|
||||
"measurement_note": "sampled process values, not guaranteed loading peaks"
|
||||
},
|
||||
"upstream_merge_name_mismatch": true
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
哎呀,这个问题挺有意思的!要是让我去一个完全没去过的地方,那我肯定得去北极啊!你想啊,那地方冰天雪地的,白茫茫的一片,连路都没有,走路都得小心翼翼的。但你说这地方多刺激!穿厚厚的羽绒服,戴上防风手套,脚底下踩着雪板或者雪鞋,一步一步往前挪,呼哧呼哧喘着粗气。抬头看天,全是星星,连北极光都能看见,那叫一个美!不过呢,也挺难的,吃饭得靠口哨,因为风声太大,说话听不清。坐那儿吃点热汤,暖暖身子,再看看远处的冰山,那才叫过瘾!你说这地方荒不荒?可就是这荒,才让人觉得活着真痛快!
|
||||
+1
@@ -0,0 +1 @@
|
||||
哎呀,这个问题挺有意思的!要是让我去
|
||||
+1
@@ -0,0 +1 @@
|
||||
一个完全没去过的地方,那我肯定得
|
||||
+1
@@ -0,0 +1 @@
|
||||
光都能看见,那叫一个美!不过
|
||||
+1
@@ -0,0 +1 @@
|
||||
呢,也挺难的,吃饭得靠
|
||||
+1
@@ -0,0 +1 @@
|
||||
口哨,因为风声太大,说话听
|
||||
+1
@@ -0,0 +1 @@
|
||||
不清。坐那儿吃点热汤,暖
|
||||
+1
@@ -0,0 +1 @@
|
||||
暖身子,再看看远处的冰山,
|
||||
+1
@@ -0,0 +1 @@
|
||||
那才叫过瘾!你说这地方荒
|
||||
+1
@@ -0,0 +1 @@
|
||||
不荒?可就是这荒,才让人
|
||||
+1
@@ -0,0 +1 @@
|
||||
觉得活着真痛快!
|
||||
+1
@@ -0,0 +1 @@
|
||||
去北极啊!你想啊,那地方冰
|
||||
+1
@@ -0,0 +1 @@
|
||||
天雪地的,白茫茫的一片,
|
||||
+1
@@ -0,0 +1 @@
|
||||
连路都没有,走路都得小心翼翼的。
|
||||
+1
@@ -0,0 +1 @@
|
||||
但你说这地方多刺激!穿厚厚的羽
|
||||
+1
@@ -0,0 +1 @@
|
||||
绒服,戴上防风手套,脚底下
|
||||
+1
@@ -0,0 +1 @@
|
||||
踩着雪板或者雪鞋,一步一步往前
|
||||
+1
@@ -0,0 +1 @@
|
||||
挪,呼哧呼哧喘着粗气
|
||||
+1
@@ -0,0 +1 @@
|
||||
。抬头看天,全是星星,连北极
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
1490,4299,6486,4299,4299,1708,3653,2924,2195,4526,5021,2582,2303,5189,5105,2918,3161,5429,3008,1788,3648,5919,3003,1869,2139,4758,2415,4605,4611,3474,2585,4366,3601,4514,835,1752,2274,2698,484,60,4947,2699,4805,4826,716,1118,3320,5667,5019,4607,6142,6455,4185,1938,306,2192,3647,3890,1946,1945,4299,6486,6486,4299
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
6486,6405,5838,5919,4218,4218,3408,2753,3083,2630,5238,5319,3720,3724,3157,5999,4700,4952,2861,4373,1457,710,596,110,879,5648,4756,2391,6317,3482,5021,1059,180,4970,1451,1423,974,731,4492,5937,4998,3111,3128,4487,2638,4314,932,2573,4857,5649,4756,5541,3372,5334,4852,663,2912,2297,1038,2252,147,60,5669,4940,3077,6534,3618,2756,3161,2675,4637,2037,3888,5835,5838,2922,1545,1959,3750,19,5837
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
322,4967,6098,5534,4444,5402,2481,2663,20,1235,2121,4299,3891,3648,5835,5916,3651,2112,1560,80,386,4567,4314,2163,2381,548,566,2004,5648,2023,3320,1125,654,5831,5753,5032,5040,3339,1275,2819,617,3906,272,4151,264,165,5832,5923,4379,751,1726,5648,3238,2573,8,14,1489,4299,6486,4218,1950,5934,2934,5266,5265,5995,5189,960,4676,2321,5753,704,161,3481,5669,1456,183,5078,4311,4068
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
2273,8,278,386,1115,4299,6486,6486,6486,6486,4218,3651,5838,3648,1701,4299,4299,2163,1426,4373,582,669,5102,5081,4862,19,3906,2189,3161,3413,2441,3494,1460,1735,2014,1294,1295,4813,2418,2220,4947,4965,26,3910,1476,1463,1460,2,3666,1833,2242,5266,3890,1946,1703,1702,1704,5835,5838,5838,2922,2112,2949,6048,5319
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
795,3875,4275,6534,5510,5105,20,1806,1272,59,386,813,162,5355,5752,5054,489,405,2688,1439,2174,3709,5319,5319,5294,6238,6239,4295,2135,2056,1947,3726,5838,5109,2922,1303,2031,3454,4913,4508,6500,2657,143,233,4356,6534,3600,5093,6419,5962,6048,2340,2333,4880,4074,297,5835,5832,5998,5272,2249,876,549,5192,6077
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
3890,1703,3889,2025,3648,5919,4056,2031,5940,6048,3861,6554,5081,4984,5028,5038,6157,5837,141,60,4947,2697,5526,4317,3603,1856,2004,5405,4407,339,4778,4465,4716,5688,6486,6486,4299,3975,3972,5835,5838,5838,3651,3732,2112,5649,5644,3557,2894,2459,3909,2225,3809,1622,958,1599,6048,5322,3018,4615,69,4850,8,881,3714,6069,4852,2216
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
1275,2187,6075,6086,5672,4951,4959,4224,1944,3645,3648,1461,4299,1726,1479,362,974,4376,3747,2206,4700,1544,773,5319,5322,156,4487,4392,5934,6099,5653,5419,4439,2216,11,1704,3645,5835,5838,1545,4245,6374,2255,5192,222,165,5106,5842,2288,1725,84,5845,2192,2807,4291,4127,194,737,1564,1527,6291,3582,1125,306,2243,2163,1686
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
5021,4967,6424,5560,6048,4593,4568,5834,4466,4474,741,1704,5835,5838,3651,1464,4299,5937,3666,5188,5994,5995,5914,5837,138,6377,2916,3659,116,150,5647,4850,6158,5081,1419,654,6559,5090,2567,2339,4939,3481,557,305,35,2237,1523,4299,6486,6486,6486,4299,3651,5835,5838,3651,2922,1788,4218,3913,5615,2834,3712,6049,3861,6554,5081,5051,5023,3159,1704,5835,735
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
2112,4515,957,2327,1680,57,5020,5020,3076,6510,2846,1217,509,2779,5028,5028,5054,5752,5034,4317,4356,5831,4947,5028,728,572,2684,4871,4952,5609,4308,6486,6486,4299,4218,3975,4056,4299,2112,243,405,2449,155,2139,4920,4756,2580,5340,5076,5092,5825,5967,5238,1535,1527,3054,4850,2411,2558,2760,5028,2915,5759,4865,4871,4961,1957
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
4134,5835,5838,3651,1869,2058,5648,2922,3658,1547,3157,5336,5996,5672,1661,1661,3044,5937,4929,3381,4130,221,2324,309,4520,4727,2675,2765,3492,4218,4135,2112,5028,5028,2841,2186,710,2648,870,3150,3146,1680,4512,2426,4485,5202,6261,54,5589,4956,5065,4319,4318,651,2682,5356,3731,3650,1466,1463,1788,4299,6486,6486,4299,4218
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
497,701,2870,5086,975,165,2931,44,1563,312,4940,4560,1806,2263,305,1122,4756,3084,5343,2163,954,2330,548,323,2085,6377,6134,1041,2024,1295,35,5189,5269,5265,5915,3899,1702,4299,6486,6486,6486,6486,6405,4218,1959,3185,3455,5642,5182,5402,4677,4499,3647,1712,1712,1703,3890,5834,3656,1712,1702,4299,3972,3648,5835,5838,1458
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
4299,3909,5850,4459,4409,1923,66,4940,4778,6453,3618,2756,2675,4955,1395,2139,1695,5102,5047,5286,768,4785,4967,4490,4507,4753,4996,942,971,62,1842,78,5668,4778,1596,63,2270,3161,2432,2028,1701,3645,5832,1458,2112,2139,469,1463,737,4570,3339,6498,5671,4945,4314,2855,3404,4871,3987
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
2234,4769,3455,1268,4778,2166,3837,4947,4912,4517,2192,2216,768,1707,3648,5838,3651,2112,1815,161,2582,2297,5473,6255,5958,5094,5829,2827,300,2819,2897,4311,2125,116,368,4742,4993,2411,569,575,602,2087,4299,6486,4299,4218,3645,3975,4299,2112,6379,6455,316,518,629,1937,1665,5827,5829,5095,1032,389,5006,297,2264,4841,4417,5402,2212
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
1217,272,5170,6374,321,2483,4643,4886,5641,5641,5669,5668,4940,2266,1275,56,2918,2189,4385,981,6486,6486,4299,4218,3648,5835,5835,2922,1545,2166,63,4540,2373,6099,2699,3239,6291,1413,5816,954,5244,3153,4569,4768,69,786,3482,4778,6534,2764,3407,2450,1833,478,728,4754,1032,6455,6373,5634,5177,1506,6379,2994,4211,404,62,1763,1735,4299,6486,4299,4299,1518,6048
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
1377,3898,2513,4961,4869,4944,5038,5057,2897,4863,2860,5000,1110,2495,5342,4130,1861,1859,1855,2171,692,5776,5802,6534,6507,6537,2186,1457,719,5077,2791,3888,5832,5838,2922,2112,1761,4406,5192,2411,5322,2334,3728,2768,3519,6534,1301,491,2861,6453,2857,5068,5529,6048,5319,614,710,1107,297,5832,6084,4780,5672,3494
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
4224,4218,3888,5835,5838,2922,1788,4191,4919,161,1946,5053,468,63,5021,1295,6130,4678,4553,5917,5914,2377,6379,4374,3658,899,870,3154,2987,4833,5568,1942,971,4564,2166,2620,6077,1955,692,3570,2850,5086,1599,3875,4603,4509,4839,1185,962,71,5401,6374,4678,1295,314,35,4540
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
3009,1707,5838,5109,2922,2436,2112,1968,3482,1295,4939,3153,2166,5814,5829,5826,4534,2753,890,2166,2160,5102,5102,3640,3599,1220,749,1995,4673,330,269,2219,5934,5937,2774,1403,701,2870,4946,4942,2029,1701,3891,3645,5832,3159,1303,654,5028,3579,4373,5830,1206,3705,5319,3054,3881,5825,2769,5028,4345,5827,1686,5322,5319,3063,5333,3144,5970,4293,3493,1541
|
||||
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
1645,1605,140,3468,4915,3321,1398,5826,237,5651,5159,4407,4749,4857,2501,791,2113,4299,6486,6486,6486,6486,4299,4299,4299,4299,4299,2112,864,5835,1466,4463,147,27,4961,5093,606,165,5844,5269,122,1644,60,4947,5641,4598,4460,4500,5121,6486,3975,5838,1464,2112,2706,4836,3813,916,818,8,2402,5319,4509,4615,4444,5645,5645
|
||||
+1
@@ -0,0 +1 @@
|
||||
49
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Loaded 100 of 190 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user