GeekAlerts

جایی برای گیک‌ها

معرفی مدل چندوجهی Qwen3-Omni با تمرکز روی صدا و تصویر

معرفی مدل چندوجهی Qwen3-Omni با تمرکز روی صدا و تصویر

خلاصه

  • Qwen3-Omni یک مدل هوش مصنوعی چندوجهی جدیده که همزمان با متن، تصویر، صدا و ویدیو کار میکنه.
  • میتونه مثل یک دستیار هوشمند، جواب‌ها رو هم به صورت متن و هم به صورت گفتار طبیعی و کاملا لحظه‌ای بهمون بده.
  • معماریش خیلی پیشرفته‌ست؛ از AuT (برای پردازش صدا با ۲۰ میلیون ساعت داده) و MoE (برای سرعت بالا و پردازش همزمان) استفاده میکنه.
  • نکته جالبش اینه که تو حالت‌های تک‌رسانه‌ای (مثل فقط متن یا فقط تصویر) هم کیفیتش اصلا کم نشده و عملکردش عالیه.
  • این مدل در بیشتر بنچمارک‌های صوتی و تصویری از رقبا، حتی مدل‌های بزرگی مثل Gemini 2.5 Pro و GPT-4o، بهتر عمل کرده و صدرنشینه.
  • قابلیت چندزبانگی هم داره؛ از ۱۱۹ زبان متنی، ۱۹ زبان ورودی گفتاری و ۱۰ زبان خروجی گفتاری پشتیبانی میکنه.
  • میشه ازش برای کارهای مختلفی مثل تشخیص گفتار، ترجمه، تحلیل موسیقی، OCR، پاسخ به سوالات تصویری/ویدیویی و حتی کارهای ایجنت‌مانند استفاده کرد.
  • برای نصب و اجراش، ابزارهایی مثل Hugging Face و vLLM (که برای استنتاج توصیه میشه) در دسترس هستن.
  • میتونیم رفتار مدل رو با پرامپت‌های سیستمی شخصی‌سازی کنیم و حتی صدای خروجی رو هم تغییر بدیم.

خب Qwen3-Omni یک مدل پایه چندوجهی که میتونه همزمان با متن، عکس، صدا و ویدیو کار کنه. این مدل به صورت کاملا بومی و سرتاسری (end-to-end) طراحی شده و جالبه که میتونه جواب‌ها رو به صورت زنده و در لحظه (real-time streaming) هم به شکل متن و هم به شکل گفتار طبیعی به شما تحویل بده. یعنی همزمان که داره فکر میکنه، میتونه باهاتون حرف بزنه. بیاین یکم عمیق‌تر ببینیم داستان این مدل چیه و چه چیزهایی توی چنته داره.

معماری و طراحی خلاقانه پشت صحنه

برای اینکه بفهمیم این مدل چطوری کار میکنه، باید به ساختار و معماریش یک نگاهی بندازیم. چند تا نکته کلیدی توی طراحیش وجود داره که اونو از بقیه متمایز میکنه.

  • AuT (Audio Transformer): بخش انکودر صوتی این مدل از یک معماری به اسم AuT استفاده میکنه. این بخش روی ۲۰ میلیون ساعت داده صوتی تمرین داده شده. این حجم عظیم از داده باعث میشه که قابلیت خیلی قدرتمندی برای درک و نمایندگی کلی صداها داشته باشه.
  • MoE (Mixture of Experts): هم بخش «متفکر» (Thinker) و هم بخش «سخنگو» (Talker) این مدل از معماری MoE بهره میبرن. این ساختار کمک میکنه که مدل بتونه همزمان به درخواست‌های زیادی جواب بده (high concurrency) و سرعت استنتاج یا همون جواب دادنش خیلی بالا باشه.
  • Multi-Codebook: بخش سخنگوی مدل از یک طرح خودرگرسیو چندکدبوکی استفاده میکنه. به این صورت که «سخنگو» در هر مرحله یک فریم کدک تولید میکنه و یک ماژول دیگه به اسم MTP بقیه کدبوک‌های باقی‌مونده رو میسازه.
  • بدون افت کیفیت بین حالت‌های مختلف: یکی از نکات مهم اینه که در مراحل اولیه پیش‌آموزش متنی، داده‌های تک‌حالتی (مثلن فقط متن) با داده‌های چندحالتی (مثلن متن و عکس) ترکیب شدن. نتیجه این کار این شده که عملکرد مدل توی همه حالت‌ها در یک سطح باقی بمونه و افت نکنه. یعنی وقتی داره با صدا کار میکنه، تواناییش توی درک متن کم نمیشه و در عین حال، قابلیت‌های چندوجهی اون به شکل قابل توجهی بهتر شده.

توانایی‌های برجسته در گفتگو و دستورپذیری

گفته شده که Qwen3-Omni توی کارهایی مثل تشخیص گفتار و دنبال کردن دستورالعمل‌ها، عملکردی در سطح مدل Gemini-2.5-Pro داره. این یعنی میتونه خیلی خوب حرف شما رو بفهمه و کاری که ازش میخواین رو انجام بده.

همچنین به خاطر کاهش زیاد تاخیر (latency) در کل فرآیند، از انکودرها گرفته تا بخش‌های متفکر، سخنگو و Code2Wav، این مدل میتونه به صورت کاملا جریانی (fully streaming) خروجی تولید کنه. این قابلیت امکان استریم کردن از همون اولین فریم کدک رو فراهم میکنه که تجربه تعامل صوتی و تصویری رو خیلی سریع و زنده میکنه.

ویژگی‌های کلیدی Qwen3-Omni

این مدل چند تا ویژگی اساسی داره که خوبه بدونیم:

  • عملکرد پیشرفته در همه حالت‌ها: همونطور که گفته شد، به لطف پیش‌آموزش اولیه مبتنی بر متن و آموزش ترکیبی چندوجهی، این مدل به صورت بومی از چند رسانه پشتیبانی میکنه. در حالی که نتایج خیلی خوبی در زمینه صدا و صدا-ویدیو به دست آورده، عملکردش در حالت‌های تک‌رسانه‌ای مثل متن و تصویر هم هیچ افتی نکرده. این مدل در ۲۲ تا از ۳۶ بنچمارک صوتی/ویدیویی به بالاترین سطح عملکرد (SOTA) رسیده و در ۳۲ تا از ۳۶ بنچمارک، در بین مدل‌های متن‌باز بهترین عملکرد (open-source SOTA) رو داشته. عملکردش در تشخیص گفتار (ASR)، درک صوتی و مکالمه صوتی هم با Gemini 2.5 Pro قابل مقایسه است.
  • چندزبانه بودن: این مدل از ۱۱۹ زبان متنی، ۱۹ زبان برای ورودی گفتاری و ۱۰ زبان برای خروجی گفتاری پشتیبانی میکنه.
    • زبان‌های ورودی گفتاری: انگلیسی، چینی، کره‌ای، ژاپنی، آلمانی، روسی، ایتالیایی، فرانسوی، اسپانیایی، پرتغالی، مالایی، هلندی، اندونزیایی، ترکی، ویتنامی، کانتونی، عربی و اردو.
    • زبان‌های خروجی گفتاری: انگلیسی، چینی، فرانسوی، آلمانی، روسی، ایتالیایی، اسپانیایی، پرتغالی، ژاپنی و کره‌ای.
  • معماری جدید: همونطور که اشاره شد، طراحی مبتنی بر MoE برای Thinker–Talker با پیش‌آموزش AuT برای نمایش کلی قوی، به علاوه طراحی multi-codebook که تاخیر رو به حداقل میرسونه، از ویژگی‌های معماری این مدله.
  • تعامل صوتی/ویدیویی در لحظه: با تاخیر کم و به صورت استریم، مکالمه‌ای طبیعی رو ممکن میکنه و بلافاصله جواب متنی یا گفتاری میده.
  • کنترل انعطاف‌پذیر: میشه رفتار مدل رو از طریق پرامپت‌های سیستمی (system prompts) شخصی‌سازی کرد تا کنترل دقیق‌تری روی اون داشت و راحت‌تر تطبیقش داد.
  • مدل کپشن‌نویس صوتی دقیق: یک مدل به اسم Qwen3-Omni-30B-A3B-Captioner هم به صورت متن‌باز منتشر شده. این مدل یک ابزار عمومی برای کپشن‌نویسی صوتی با جزئیات بالا و توهم (hallucination) پایینه که جای خالیش در جامعه متن‌باز حس میشد.

این مدل به چه دردی میخوره؟ (سناریوهای کاربردی)

Qwen3-Omni طیف گسترده‌ای از کاربردهای چندوجهی رو پوشش میده که شامل وظایف مختلفی در حوزه‌های صوتی، تصویری، ویدیویی و صوتی-تصویری میشه. در ادامه یک لیست از کارهایی که میشه باهاش انجام داد رو میبینید:

دسته‌بندیکاربردتوضیحات
صوتیتشخیص گفتارتشخیص گفتار برای زبان‌های مختلف و فایل‌های صوتی طولانی.
ترجمه گفتارترجمه گفتار به متن (Speech-to-Text) و گفتار به گفتار (Speech-to-Speech).
تحلیل موسیقیتحلیل و درک دقیق هر نوع موسیقی، شامل سبک، ژانر، ریتم و غیره.
تحلیل صداتوصیف و تحلیل افکت‌های صوتی مختلف و سیگنال‌های صوتی.
کپشن صوتینوشتن کپشن و توصیف دقیق برای هر نوع ورودی صوتی.
تحلیل صوتی ترکیبیتحلیل محتوای صوتی ترکیبی مثل گفتار، موسیقی و صداهای محیطی.
بصریOCRخواندن متن از روی تصاویر پیچیده.
مکان‌یابی اشیاتشخیص و مکان‌یابی هدف در تصاویر.
پرسش و پاسخ تصویریجواب دادن به هر سوالی در مورد هر تصویری.
ریاضیات تصویریحل مسائل ریاضی پیچیده در تصاویر که توانایی‌های مدل Thinking رو نشون میده.
ویدیوییتوصیف ویدیوتوصیف دقیق محتوای یک ویدیو.
ناوبری ویدیوییتولید دستورات ناوبری از روی ویدیوهای اول شخص در حال حرکت.
تشخیص تغییر صحنهتحلیل تغییرات صحنه در ویدیوها.
صوتی-بصریپرسش و پاسخ صوتی-بصریپاسخ به سوالات دلخواه در سناریوهای صوتی-بصری که توانایی مدل در هم‌ترازی زمانی بین صدا و تصویر رو نشون میده.
تعامل صوتی-بصریارتباط تعاملی با مدل با استفاده از ورودی‌های صوتی-بصری، از جمله مشخص کردن وظایف از طریق صدا.
گفتگوی صوتی-بصریگفتگوی محاوره‌ای با مدل با ورودی‌های صوتی-بصری که قابلیت‌های اون در چت معمولی و رفتار دستیارگونه رو نشون میده.
ایجنتفراخوانی تابع با صدااستفاده از ورودی صوتی برای اجرای فراخوانی تابع (function calls) که رفتارهای ایجنت‌مانند رو ممکن میکنه.
فاین‌تیونOmni Captionerمعرفی و نمایش قابلیت‌های مدل Qwen3-Omni-30B-A3B-Captioner که یک مدل فاین‌تیون شده بر اساس مدل اصلیه و توانایی تعمیم‌پذیری قوی مدل پایه Qwen3-Omni رو نشون میده.

مدل‌های مختلف Qwen3-Omni

چند نسخه مختلف از این مدل وجود داره که هر کدوم برای کار خاصی طراحی شدن. شما میتونین بر اساس نیازتون یکی رو انتخاب و دانلود کنین:

اسم مدلتوضیحات
Qwen3-Omni-30B-A3B-Instructمدل Instruct که هم بخش thinker و هم talker رو داره. از ورودی صوتی، ویدیویی و متنی پشتیبانی میکنه و خروجی صوتی و متنی میده.
Qwen3-Omni-30B-A3B-Thinkingمدل Thinking که فقط بخش thinker رو داره. به قابلیت استدلال زنجیره‌ای (chain-of-thought) مجهزه. از ورودی صوتی، ویدیویی و متنی پشتیبانی میکنه و خروجی متنی میده.
Qwen3-Omni-30B-A3B-Captionerیک مدل فاین‌تیون شده برای نوشتن کپشن صوتی دقیق که از مدل Instruct مشتق شده. برای هر ورودی صوتی، کپشن‌های باجزئیات و با توهم کم تولید میکنه. این مدل بخش thinker رو داره و از ورودی صوتی و خروجی متنی پشتیبانی میکنه.

بر اساس آمار، این مدل‌ها در ماه گذشته ۱,۶۹۲ بار دانلود شدن.

راهنمای نصب و راه‌اندازی

دانلود وزن‌های مدل

موقع لود کردن مدل در Hugging Face Transformers یا vLLM، وزن‌ها به صورت خودکار دانلود میشن. اما اگه محیط شما برای دانلود حین اجرا مناسب نیست، میتونین از دستورات زیر برای دانلود دستی استفاده کنین:

# دانلود از طریق ModelScope (برای کاربران در چین توصیه میشه)
pip install -U modelscope
modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Instruct --local_dir ./Qwen3-Omni-30B-A3B-Instruct
modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Thinking --local_dir ./Qwen3-Omni-30B-A3B-Thinking
modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Captioner --local_dir ./Qwen3-Omni-30B-A3B-Captioner
# دانلود از طریق Hugging Face
pip install -U "huggingface_hub[cli]"
huggingface-cli download Qwen/Qwen3-Omni-30B-A3B-Instruct --local-dir ./Qwen3-Omni-30B-A3B-Instruct
huggingface-cli download Qwen/Qwen3-Omni-30B-A3B-Thinking --local-dir ./Qwen3-Omni-30B-A3B-Thinking
huggingface-cli download Qwen/Qwen3-Omni-30B-A3B-Captioner --local-dir ./Qwen3-Omni-30B-A3B-Captioner

نصب پیش‌نیازها

کد Hugging Face Transformers برای Qwen3-Omni با موفقیت ادغام شده اما هنوز بسته PyPI اون منتشر نشده. برای همین باید اون رو از سورس نصب کنین. خیلی توصیه میشه که یک محیط پایتون جدید بسازین تا با محیط فعلیتون تداخل پیدا نکنه.

# اگه از قبل transformers رو نصب دارین، اول حذفش کنین یا یک محیط پایتون جدید بسازین
# pip uninstall transformers
pip install git+https://github.com/huggingface/transformers
pip install accelerate

یک ابزاری هم ارائه شده که کمک میکنه ورودی‌های صوتی و تصویری مختلف رو راحت‌تر مدیریت کنین و تجربه‌ای شبیه به API داشته باشین. این ابزار از base64، URL و ورودی‌های درهم‌تنیده صوتی، تصویری و ویدیویی پشتیبانی میکنه. حواستون باشه که ffmpeg هم روی سیستمتون نصب باشه.

pip install qwen-omni-utils -U

همچنین، توصیه میشه که موقع اجرا با Hugging Face Transformers از FlashAttention 2 استفاده کنین تا مصرف حافظه GPU کمتر بشه. البته اگه بیشتر از vLLM برای استنتاج استفاده میکنین، این نصب ضروری نیست چون vLLM خودش FlashAttention 2 رو داره.

pip install -U flash-attn --no-build-isolation

برای استفاده از FlashAttention 2 سخت‌افزارتون هم باید باهاش سازگار باشه و مدل هم باید با دقت torch.float16 یا torch.bfloat16 لود بشه.

چطور از مدل استفاده کنیم: یک مثال ساده

اینجا یک تکه کد هست که نشون میده چطوری میشه از Qwen3-Omni با transformers و qwen_omni_utils استفاده کرد:

import soundfile as sf
from transformers import Qwen3OmniMoeForConditionalGeneration, Qwen3OmniMoeProcessor
from qwen_omni_utils import process_mm_info
MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Instruct"
# MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Thinking"
model = Qwen3OmniMoeForConditionalGeneration.from_pretrained(
    MODEL_PATH,
    dtype="auto",
    device_map="auto",
    attn_implementation="flash_attention_2",
)
processor = Qwen3OmniMoeProcessor.from_pretrained(MODEL_PATH)
conversation = [
    {
        "role": "user",
        "content": [
            {"type": "image", "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cars.jpg"},
            {"type": "audio", "audio": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cough.wav"},
            {"type": "text", "text": "What can you see and hear? Answer in one short sentence."}
        ],
    },
]
# مشخص میکنیم که آیا از صدای داخل ویدیو استفاده بشه یا نه
USE_AUDIO_IN_VIDEO = True
# آماده‌سازی برای استنتاج
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
audios, images, videos = process_mm_info(conversation, use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = processor(text=text,
                    audio=audios,
                    images=images,
                    videos=videos,
                    return_tensors="pt",
                    padding=True,
                    use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = inputs.to(model.device).to(model.dtype)
# استنتاج: تولید خروجی متنی و صوتی
text_ids, audio = model.generate(**inputs,
                                speaker="Ethan",
                                thinker_return_dict_in_generate=True,
                                use_audio_in_video=USE_AUDIO_IN_VIDEO)
text = processor.batch_decode(text_ids.sequences[:, inputs["input_ids"].shape[1] :],
                                skip_special_tokens=True,
                                clean_up_tokenization_spaces=False)
print(text)
if audio is not None:
    sf.write(
        "output.wav",
        audio.reshape(-1).detach().cpu().numpy(),
        samplerate=24000,
    )

استفاده‌های پیشرفته‌تر

استنتاج دسته‌ای (Batch Inference)

مدل میتونه ورودی‌های ترکیبی از انواع مختلف مثل متن، عکس، صدا و ویدیو رو به صورت دسته‌ای پردازش کنه، البته به شرطی که return_audio=False تنظیم شده باشه. کد زیر یک نمونه از این کاره:

# ... (بخش لود کردن مدل و پردازنده مثل کد قبلی)
model.disable_talker() # غیرفعال کردن بخش سخنگو برای پردازش دسته‌ای
# مکالمه فقط با عکس
conversation1 = [{"role": "user", "content": [{"type": "image", "image": "https://.../cars.jpg"}, {"type": "text", "text": "What can you see...?"}]}]
# مکالمه فقط با صدا
conversation2 = [{"role": "user", "content": [{"type": "audio", "audio": "https://.../cough.wav"}, {"type": "text", "text": "What can you hear...?"}]}]
# مکالمه فقط متنی با پرامپت سیستمی
conversation3 = [{"role": "system", "content": [{"type": "text", "text": "You are Qwen-Omni."}]}, {"role": "user", "content": "Who are you?"}]
# مکالمه با رسانه ترکیبی
conversation4 = [{"role": "user", "content": [{"type": "image", "image": "https://.../cars.jpg"}, {"type": "audio", "audio": "https://.../cough.wav"}, {"type": "text", "text": "What can you see and hear...?"}]}]
conversations = [conversation1, conversation2, conversation3, conversation4]
# آماده‌سازی و پردازش دسته‌ای
text = processor.apply_chat_template(conversations, add_generation_prompt=True, tokenize=False)
audios, images, videos = process_mm_info(conversations, use_audio_in_video=True)
inputs = processor(text=text, audio=audios, images=images, videos=videos, return_tensors="pt", padding=True, use_audio_in_video=True)
inputs = inputs.to(model.device).to(model.dtype)
# استنتاج دسته‌ای از خروجی صوتی پشتیبانی نمیکنه
text_ids, audio = model.generate(**inputs, return_audio=False, thinker_return_dict_in_generate=True, use_audio_in_video=True)
text = processor.batch_decode(text_ids.sequences[:, inputs["input_ids"].shape[1] :], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(text)

فعال یا غیرفعال کردن خروجی صوتی

مدل هم خروجی متنی و هم صوتی میده. اگه به خروجی صوتی نیازی ندارین، میتونین بعد از راه‌اندازی مدل، تابع model.disable_talker() رو فراخوانی کنین. این کار حدود ۱۰ گیگابایت از حافظه GPU رو آزاد میکنه، اما بعدش دیگه نمیتونین return_audio رو در تابع generate روی True بذارین.

برای انعطاف بیشتر، توصیه میشه موقع فراخوانی تابع generate تصمیم بگیرین که خروجی صوتی میخواین یا نه. اگه return_audio روی False تنظیم بشه، مدل فقط خروجی متنی برمیگردونه که باعث میشه جواب‌های متنی سریع‌تر تولید بشن.

تغییر نوع صدای خروجی

Qwen3-Omni این قابلیت رو داره که صدای خروجی رو تغییر بده. چک‌پوینت Qwen/Qwen3-Omni-30B-A3B-Instruct از سه نوع صدای مختلف پشتیبانی میکنه:

نوع صداجنسیتتوضیحات
Ethanمردصدایی روشن و شاداب با انرژی زیاد و حسی گرم و صمیمی.
Chelsieزنصدایی شیرین و مخملی که گرمای ملایم و شفافیت درخشانی داره.
Aidenمردصدایی گرم و آرام آمریکایی با جذابیتی ملایم و پسرانه.

برای مشخص کردن نوع صدا، میشه از پارامتر speaker در تابع generate استفاده کرد. اگه این پارامتر مشخص نشه، به صورت پیش‌فرض از صدای Ethan استفاده میشه.

text_ids, audio = model.generate(..., speaker="Ethan")
text_ids, audio = model.generate(..., speaker="Chelsie")
text_ids, audio = model.generate(..., speaker="Aiden")

استفاده از vLLM برای استنتاج (روش پیشنهادی)

خیلی توصیه میشه که برای استنتاج و دیپلوی مدل‌های سری Qwen3-Omni از vLLM استفاده کنین. چون کدها هنوز در مرحله پول ریکوئست هستن، باید vLLM رو از سورس نصب کنین. باز هم پیشنهاد میشه که یک محیط پایتون جدید بسازین.

git clone -b qwen3_omni https://github.com/wangxiongts/vllm.git
cd vllm
pip install -r requirements/build.txt
pip install -r requirements/cuda.txt
export VLLM_PRECOMPILED_WHEEL_LOCATION=https://wheels.vllm.ai/a5dd03c1ebc5e4f56f3c9d3dc0436e9c582c978f/vllm-0.9.2-cp38-abi3-manylinux1_x86_64.whl
VLLM_USE_PRECOMPILED=1 pip install -e . -v --no-build-isolation
# بقیه نصب‌ها مثل transformers, accelerate, qwen-omni-utils و flash-attn

در ادامه یک نمونه کد ساده برای اجرای Qwen3-Omni با vLLM آورده شده:

import os
import torch
from vllm import LLM, SamplingParams
from transformers import Qwen3OmniMoeProcessor
from qwen_omni_utils import process_mm_info
if __name__ == '__main__':
    os.environ['VLLM_USE_V1'] = '0' # موتور نسخه ۱ vLLM هنوز پشتیبانی نمیشه
    MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Instruct"
    llm = LLM(
        model=MODEL_PATH, trust_remote_code=True, gpu_memory_utilization=0.95,
        tensor_parallel_size=torch.cuda.device_count(),
        limit_mm_per_prompt={'image': 3, 'video': 3, 'audio': 3},
        max_num_seqs=8,
        max_model_len=32768,
        seed=1234,
    )
    sampling_params = SamplingParams(temperature=0.6, top_p=0.95, top_k=20, max_tokens=16384)
    processor = Qwen3OmniMoeProcessor.from_pretrained(MODEL_PATH)
    messages = [{"role": "user", "content": [{"type": "video", "video": "https://.../draw.mp4"}]}]
    text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
    audios, images, videos = process_mm_info(messages, use_audio_in_video=True)
    inputs = {
        'prompt': text,
        'multi_modal_data': {},
        "mm_processor_kwargs": {"use_audio_in_video": True},
    }
    if images is not None: inputs['multi_modal_data']['image'] = images
    if videos is not None: inputs['multi_modal_data']['video'] = videos
    if audios is not None: inputs['multi_modal_data']['audio'] = audios
    outputs = llm.generate([inputs], sampling_params=sampling_params)
    print(outputs[0].outputs[0].text)

استفاده از vLLM برای استنتاج دسته‌ای هم خیلی سریعه و به شما کمک میکنه حجم زیادی از داده رو پردازش کنین. سرویس vLLM serve در حال حاضر فقط از مدل thinker پشتیبانی میکنه.

نکات فنی و بهترین شیوه‌ها

نیازمندی‌های حافظه

جدول زیر حداقل حافظه مورد نیاز تئوریک برای استنتاج با transformers و دقت BF16 رو نشون میده. این تست‌ها با attn_implementation="flash_attention_2" انجام شدن.

مدلدقتویدیوی ۱۵ ثانیهویدیوی ۳۰ ثانیهویدیوی ۶۰ ثانیهویدیوی ۱۲۰ ثانیه
Qwen3-Omni-30B-A3B-InstructBF16۷۸.۸۵ GB۸۸.۵۲ GB۱۰۷.۷۴ GB۱۴۴.۸۱ GB
Qwen3-Omni-30B-A3B-ThinkingBF16۶۸.۷۴ GB۷۷.۷۹ GB۹۵.۷۶ GB۱۳۱.۶۵ GB

استفاده از پرامپت سیستمی

موقع استفاده از مدل برای تعامل صوتی-بصری (مثلن یک ویدیو به عنوان ورودی و یک سوال صوتی)، توصیه میشه از پرامپت سیستمی زیر استفاده کنین. این کار به مدل کمک میکنه قابلیت استدلال خودش رو حفظ کنه و بهتر در نقش یک دستیار هوشمند قرار بگیره.

user_system_prompt = "You are Qwen-Omni, a smart voice assistant created by Alibaba Qwen."
message = {
    "role": "system",
    "content": [
        {"type": "text", "text": f"{user_system_prompt} You are a virtual voice assistant..."} # ادامه متن پرامپت
    ]
}

نکته‌ای برای مدل Thinking

مدل Qwen3-Omni-30B-A3B-Thinking در اصل برای درک و تعامل با ورودی‌های چندوجهی طراحی شده. برای گرفتن بهترین نتیجه، توصیه میشه که در هر دور از گفتگو، کنار ورودی چندرسانه‌ای، یک دستورالعمل متنی یا توضیح وظیفه هم بهش بدین. این کار به شفاف شدن نیت شما کمک میکنه و توانایی استدلال مدل رو به شکل قابل توجهی افزایش میده.

مدیریت صدای داخل ویدیو

معمولا ویدیوهایی که کاربر میده، خودشون صدا دارن (مثل صدای صحبت یا اتفاقات داخل ویدیو). این اطلاعات به مدل کمک میکنه تجربه تعاملی بهتری ارائه بده. شما میتونین با پارامتر use_audio_in_video مشخص کنین که آیا از صدای ویدیو استفاده بشه یا نه. نکته مهم اینه که در طول یک مکالمه چند مرحله‌ای، این پارامتر باید به صورت یکسان در تمام مراحل تنظیم بشه، وگرنه ممکنه نتایج غیرمنتظره‌ای بگیرین.

عملکرد مدل در بنچمارک‌ها

Qwen3-Omni در حالت‌های متنی و بصری، عملکرد خودش رو در سطح مدل‌های تک‌حالته هم‌اندازه از سری Qwen حفظ کرده و افتی نداشته. همونطور که قبلا گفته شد، در بین ۳۶ بنچمارک صوتی و صوتی-بصری، در ۳۲ تا از اونها بهترین عملکرد در بین مدل‌های متن‌باز و در ۲۲ تا از اونها بهترین عملکرد کلی رو به دست آورده و از سیستم‌های قدرتمند متن‌بسته مثل Gemini 2.5 Pro و GPT-4o هم بهتر عمل کرده.

در ادامه جداول عملکرد این مدل در بنچمارک‌های مختلف رو میبینید.

عملکرد متن به متن (Text -> Text)

مدل InstructMMLUGPQAAIME25ZebraLogicMultiPL-EIFEvalCreative Writing v3WritingBenchBFCL-v3MultiIFPolyMATH
GPT-4o-0327۹۱.۳۶۶.۹۲۶.۷۵۲.۶۸۲.۷۸۳.۹۸۴.۹۷۵.۵۶۶.۵۷۰.۴۲۵.۵
Qwen3-Omni-30B-A3B-Instruct۸۶.۶۶۹.۶۶۵.۰۷۶.۰۸۱.۴۸۱.۰۸۰.۶۸۲.۶۶۴.۴۶۴.۰۳۷.۹
Qwen3-Omni-Flash-Instruct۸۶.۸۶۹.۷۶۵.۹۷۶.۱۸۱.۵۸۱.۷۸۱.۸۸۳.۰۶۵.۰۶۴.۷۳۹.۳
مدل ThinkingMMLUGPQAAIME25LiveBenchMultiPL-EIFEvalArena-Hard v2Creative Writing v3WritingBenchBFCL-v3MultiIFPolyMATH
Gemini-2.5-Flash Thinking۹۲.۱۸۲.۸۷۲.۰۷۴.۳۸۴.۵۸۹.۸۵۶.۷۸۵.۰۸۳.۹۶۸.۶۷۴.۴۴۹.۸
Qwen3-Omni-30B-A3B-Thinking۸۸.۸۷۳.۱۷۳.۷۷۱.۸۸۰.۶۸۵.۱۵۵.۱۸۲.۵۸۵.۵۶۳.۲۷۲.۹۴۷.۱
Qwen3-Omni-Flash-Thinking۸۹.۷۷۳.۱۷۴.۰۷۰.۳۸۱.۰۸۵.۲۵۷.۸۸۳.۶۸۵.۹۶۴.۵۷۳.۲۴۸.۷

عملکرد صدا به متن (Audio -> Text)

در این بخش، نتایج مربوط به تشخیص گفتار (ASR)، درک گفتار (VoiceBench) و تحلیل موسیقی آورده شده. (مقدار کمتر در ASR بهتر است)

مدلWenetspeech (net/meeting)Librispeech (clean/other)CV15 (en/zh)Fleurs (en/zh)Fleurs-avg (19 lang)MIR-1KOpencpop-testS2TT (en2xx/xx2en)S2TT (zh2xx/xx2zh)
Gemini-2.5-Pro۱۴.۴۳ / ۱۳.۴۷۲.۸۹ / ۳.۵۶۷.۶۱ / ۸.۰۰۳.۳۲ / ۲.۷۱۵.۵۵۹.۸۵۶.۴۹۳۹.۲۵ / ۳۵.۴۱۲۶.۶۳ / ۳۷.۵۰
Qwen3-Omni-30B-A3B-Instruct۴.۶۹ / ۵.۸۹۱.۲۲ / ۲.۴۸۶.۰۵ / ۴.۳۱۲.۷۲ / ۲.۲۰۵.۳۳۵.۹۰۱.۵۴۳۷.۵۰ / ۳۱.۰۸۲۵.۱۷ / ۳۳.۱۳
Qwen3-Omni-Flash-Instruct۴.۶۲ / ۵.۷۵۱.۲۷ / ۲.۴۴۵.۹۴ / ۴.۲۸۲.۷۴ / ۲.۱۹۵.۳۱۵.۸۵۲.۰۲۳۶.۲۲ / ۳۰.۷۱۲۵.۱۰ / ۳۱.۱۹
مدلVoiceBench OverallMMAUMMSU (Reasoning)RUL-MuchoMusicGTZAN Acc.MTG Genre F1MTG Mood/Theme F1MTG Instrument F1MTG Top50 F1MagnaTagATune F1
Gemini-2.5-Pro۸۹.۶۷۷.۴۷۷.۷۴۹.۴۸۱.۰۳۲.۶۱۴.۱۳۳.۰۲۶.۱۲۸.۱
Qwen3-Omni-30B-A3B-Instruct۸۵.۵۷۷.۵۶۹.۰۵۲.۰۹۳.۰۳۹.۰۲۱.۰۴۰.۵۳۶.۷۴۴.۳
Qwen3-Omni-30B-A3B-Thinking۸۸.۸۷۵.۴۷۰.۲
Qwen3-Omni-Flash-Instruct۸۵.۶۷۷.۶۶۹.۱۵۲.۱۹۳.۱۳۹.۵۲۱.۷۴۰.۷۳۶.۹۴۶.۸
Qwen3-Omni-Flash-Thinking۸۹.۵۷۶.۵۷۱.۳

عملکرد تصویر به متن (Vision -> Text)

مدل InstructMMStarHallusionBenchMM-MT-BenchMMMU_valMMMU_proMathVista_miniMathVision_fullAI2DChartQA_testCountBenchVideo-MMELVBenchMLVU
GPT4-o۶۴.۷۵۵.۰۷.۷۶۹.۱۵۱.۹۶۳.۸۳۰.۴۸۴.۶۸۶.۷۸۷.۹۷۱.۹۳۰.۸۶۴.۶
Qwen3-Omni-30B-A3B-Instruct۶۸.۵۵۹.۷۷.۴۶۹.۱۵۷.۰۷۵.۹۵۶.۳۸۵.۲۸۶.۸۹۰.۰۷۰.۵۵۰.۲۷۵.۲
Qwen3-Omni-Flash-Instruct۶۹.۳۵۸.۵۷.۶۶۹.۸۵۷.۶۷۷.۴۵۸.۳۸۶.۴۸۷.۱۹۰.۰۷۱.۴۵۱.۱۷۵.۷
مدل ThinkingMMStarHallusionBenchMM-MT-BenchMMMU_valMMMU_proMathVista_miniMathVision_fullAI2D_testChartQA_testCountBenchVideo-MMELVBenchMLVU
Gemini-2.5-flash-thinking۷۵.۵۶۱.۱۷.۸۷۶.۹۶۵.۸۷۷.۶۶۲.۳۸۸.۶۸۸.۶۷۹.۶۶۴.۵۸۲.۱
Qwen3-Omni-30B-A3B-Thinking۷۴.۹۶۲.۸۸.۰۷۵.۶۶۰.۵۸۰.۰۶۲.۹۸۶.۱۸۹.۵۸۸.۶۶۹.۷۴۹.۰۷۲.۹
Qwen3-Omni-Flash-Thinking۷۵.۵۶۳.۴۸.۰۷۵.۰۶۰.۸۸۱.۲۶۳.۸۸۶.۸۸۹.۳۹۲.۵۶۹.۸۴۹.۵۷۳.۹

عملکرد صوتی-بصری به متن (AudioVisual -> Text)

مدل InstructWorldSense
Gemini-2.5-Flash۵۰.۹
Qwen3-Omni-30B-A3B-Instruct۵۴.۰
Qwen3-Omni-Flash-Instruct۵۴.۱
مدل ThinkingDailyOmniVideoHolmes
Gemini-2.5-Flash-Thinking۷۲.۷۴۹.۵
Qwen3-Omni-30B-A3B-Thinking۷۵.۸۵۷.۳
Qwen3-Omni-Flash-Thinking۷۶.۲۵۷.۳

تولید گفتار (Speech Generation)

نتایج زیر نشان‌دهنده عملکرد مدل در تولید گفتار به صورت Zero-shot (بدون نمونه قبلی)، چندزبانه و بینازبانه است.

مدلSEED test-zhSEED test-en
Qwen3-Omni-30B-A3B۱.۰۷۱.۳۹
CosyVoice 3۰.۷۱۱.۴۵
زبان (تولید چندزبانه)سازگاری محتوا (Qwen3)شباهت گوینده (Qwen3)
چینی۰.۷۱۶۰.۷۷۲
انگلیسی۱.۰۶۹۰.۷۷۳
آلمانی۰.۷۷۷۰.۷۳۸
ژاپنی۳.۶۳۱۰.۷۶۳
کره‌ای۱.۶۷۰۰.۷۷۸
زبان (تولید بینازبانه)Qwen3-Omni-30B-A3BCosyVoice3
en-to-zh۵.۳۷۵.۰۹
ja-to-zh۳.۳۲۳.۰۵
zh-to-en۲.۷۶۲.۹۸
zh-to-ja۸.۲۹۷.۰۸

جزئیات ارزیابی

برای اینکه نتایج بنچمارک‌ها قابل تکرار باشن، چند نکته در مورد نحوه ارزیابی وجود داره:

  • استراتژی دیکود کردن: برای مدل‌های Instruct از دیکود حریصانه (greedy) بدون نمونه‌برداری استفاده شده. برای مدل‌های Thinking، پارامترهای دیکود از فایل generation_config.json برداشته میشن.
  • فرمت‌بندی: بیشتر بنچمارک‌ها فرمت ChatML خودشون رو برای جاسازی سوال دارن. همچنین، تمام داده‌های ویدیویی با fps=2 ارزیابی شدن.
  • پرامپت‌های پیش‌فرض: برای بنچمارک‌هایی که پرامپت ندارن، از پرامپت‌های زیر استفاده شده:
  • پرامپت سیستمی: برای هیچکدوم از بنچمارک‌های ارزیابی، پرامپت سیستمی تنظیم نشده.
  • ترتیب ورودی: سوال یا پرامپت به عنوان متن کاربر وارد میشه و معمولا بعد از داده‌های چندرسانه‌ای در دنباله قرار میگیره.

منابع

  • [۲] Qwen
  • [۱] Qwen/Qwen3-Omni-30B-A3B-Instruct · Hugging Face

دیدگاه‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *