[อ่านบทความ] [สาธิต] [กอดหน้า]
Moshi คือโมเดลพื้นฐานคำพูด-ข้อความและกรอบบทสนทนาการพูด แบบฟูลดู เพล็กซ์ ใช้ Mimi ซึ่งเป็นตัวแปลงสัญญาณเสียงแบบสตรีมมิ่งที่ล้ำสมัย Mimi ประมวลผลเสียง 24 kHz ลงไปที่ 12.5 Hz ด้วยแบนด์วิดธ์ 1.1 kbps ในลักษณะสตรีมมิ่งเต็มรูปแบบ (เวลาแฝง 80ms ขนาดเฟรม) แต่ทำงานได้ดีกว่าตัวแปลงสัญญาณที่มีอยู่ที่ไม่ใช่สตรีมมิ่งเช่น SpeechTokenizer (50 Hz , 4kbps) หรือ SemantiCodec (50 Hz, 1.3kbps)
Moshi สร้างแบบจำลอง สตรีมเสียงสองรายการ : รายการหนึ่งสอดคล้องกับ Moshi และอีกรายการหนึ่งสำหรับผู้ใช้ ในการอนุมาน สตรีมจากผู้ใช้จะถูกนำมาจากอินพุตเสียง และสตรีมสำหรับ Moshi จะถูกสุ่มตัวอย่างจากเอาต์พุตของโมเดล ตามสตรีมเสียงทั้งสองนี้ Moshi ทำนายโทเค็นข้อความที่สอดคล้องกับคำพูดของตัวเอง บทพูดคนเดียวภายใน ซึ่งปรับปรุงคุณภาพของการสร้างอย่างมาก Depth Transformer ขนาดเล็กจะจำลองการขึ้นต่อกันของ Codebook ระหว่างกันสำหรับขั้นตอนเวลาที่กำหนด ในขณะที่ Temporal Transformer พารามิเตอร์ขนาดใหญ่ 7B จะจำลองการขึ้นต่อกันของ Codebook ชั่วคราว Moshi บรรลุความหน่วงทางทฤษฎีที่ 160ms (80ms สำหรับขนาดเฟรม Mimi + 80ms ของความล่าช้าทางเสียง) โดยมีเวลาแฝงโดยรวมในทางปฏิบัติต่ำเพียง 200ms บน L4 GPU
พูดคุยกับ Moshi ตอนนี้ในการสาธิตสดของเรา
Mimi สร้างจากตัวแปลงสัญญาณเสียงแบบนิวรัลรุ่นก่อนหน้า เช่น SoundStream และ EnCodec โดยเพิ่ม Transformer ทั้งในตัวเข้ารหัสและตัวถอดรหัส และปรับความก้าวหน้าให้ตรงกับอัตราเฟรมโดยรวมที่ 12.5 Hz ซึ่งช่วยให้ Mimi เข้าใกล้อัตราเฟรมเฉลี่ยของโทเค็นข้อความได้มากขึ้น (~3-4 Hz) และจำกัดจำนวนขั้นตอนการถดถอยอัตโนมัติใน Moshi เช่นเดียวกับ SpeechTokenizer Mimi ใช้การสูญเสียการกลั่นเพื่อให้โทเค็น Codebook แรกตรงกับการแสดงที่ดูแลด้วยตนเองจาก WavLM ซึ่งช่วยให้การสร้างแบบจำลองข้อมูลความหมายและเสียงด้วยโมเดลเดียว ที่น่าสนใจคือ แม้ว่า Mimi จะเน้นที่สาเหตุและสตรีมมิ่งอย่างเต็มที่ แต่ก็เรียนรู้ที่จะจับคู่การนำเสนอที่ไม่เกี่ยวกับสาเหตุจาก WavLM ได้ดีเพียงพอ โดยไม่ทำให้เกิดความล่าช้าใดๆ สุดท้ายนี้ เช่นเดียวกับ EBEN Mimi ใช้ เฉพาะการสูญเสียการฝึกฝ่ายตรงข้าม ร่วมกับการจับคู่ฟีเจอร์ ซึ่งแสดงให้เห็นถึงการปรับปรุงที่แข็งแกร่งในแง่ของคุณภาพเชิงอัตนัย แม้จะมีบิตเรตต่ำก็ตาม
มีสแต็กการอนุมาน Moshi สามเวอร์ชันแยกกันใน Repo นี้
เวอร์ชัน Python ที่ใช้ PyTorch อยู่ในไดเรกทอรี moshi/
เวอร์ชัน Python ที่ใช้ MLX สำหรับ Mac ซีรีส์ M อยู่ในไดเรกทอรี moshi_mlx/
เวอร์ชัน Rust ที่ใช้ในการผลิตอยู่ในไดเร็กทอรี rust/
โดยเฉพาะอย่างยิ่งการใช้งาน Mimi ใน Rust โดยมีการผูก Python เป็น rustymimi
สุดท้ายนี้ รหัสสำหรับการสาธิตสดจะระบุไว้ใน client/
ไดเร็กทอรี
เราเปิดตัวสามรุ่น:
ตัวแปลงสัญญาณเสียงพูดของเรามีมี่
Moshi ปรับแต่งเสียงสังเคราะห์ชาย (Moshiko)
Moshi ปรับแต่งเสียงสังเคราะห์ของผู้หญิง (Moshika)
รูปแบบไฟล์และปริมาณที่ใช้ได้จะแตกต่างกันไป ขึ้นอยู่กับแบ็กเอนด์ นี่คือรายการ repo HuggingFace ของแต่ละรุ่น Mimi จะรวมอยู่ในแต่ละอัน และใช้รูปแบบจุดตรวจสอบเดียวกันเสมอ
Moshika สำหรับ PyTorch (bf16): kyutai/moshika-pytorch-bf16
Moshiko สำหรับ PyTorch (bf16): kyutai/moshiko-pytorch-bf16
Moshika สำหรับ MLX (int4, int8, bf16): kyutai/moshika-mlx-q4, kyutai/moshika-mlx-q8, kyutai/moshika-mlx-bf16
Moshiko สำหรับ MLX (int4, int8, bf16): kyutai/moshiko-mlx-q4, kyutai/moshiko-mlx-q8, kyutai/moshiko-mlx-bf16
Moshika สำหรับสนิม/เทียน (int8, bf16): kyutai/moshika-candle-q8, kyutai/moshika-mlx-bf16
Moshiko สำหรับสนิม/เทียน (int8, bf16): kyutai/moshiko-candle-q8, kyutai/moshiko-mlx-bf16
ทุกรุ่นเผยแพร่ภายใต้ลิขสิทธิ์ CC-BY 4.0
คุณจะต้องมี Python 3.10 เป็นอย่างน้อย โดยแนะนำให้ใช้ 3.12 สำหรับข้อกำหนดเฉพาะ โปรดตรวจสอบไดเร็กทอรีแบ็กเอนด์แต่ละรายการ คุณสามารถติดตั้งไคลเอนต์ PyTorch และ MLX ได้ดังต่อไปนี้:
pip ติดตั้ง moshi # moshi PyTorch จาก PyPIpip ติดตั้ง moshi_mlx # moshi MLX จาก PyPI ดีที่สุดกับ Python 3.12.# หรือเวอร์ชันที่มีเลือดออกสำหรับ Moshi และ Moshi-MLX.pip install -e "git+https://git@github .com/kyutai-labs/moshi.git#egg=moshi&subdirectory=moshi"pip ติดตั้ง -e "git+https://[email protected]/kyutai-labs/moshi.git#egg=moshi_mlx&subdirectory=moshi_mlx"pip ติดตั้ง rustymimi # mimi การใช้งานสนิมด้วยการผูก Python จาก PyPI
หากคุณไม่ได้ใช้ Python 3.12 คุณอาจได้รับข้อผิดพลาดเมื่อติดตั้ง moshi_mlx
หรือ rustymimi
(ซึ่ง moshi_mlx
ขึ้นอยู่กับ) จากนั้น คุณจะต้องติดตั้ง Rust toolchain หรือเปลี่ยนเป็น Python 3.12
แม้ว่าเราหวังว่าโค้ดเบสปัจจุบันจะใช้งานได้บน Windows แต่เราไม่ได้ให้การสนับสนุนอย่างเป็นทางการ เราได้ทดสอบเวอร์ชัน MLX บน MacBook Pro M3 แล้ว ในขณะนี้ เราไม่รองรับการวัดปริมาณสำหรับเวอร์ชัน PyTorch ดังนั้นคุณจะต้องใช้ GPU ที่มีหน่วยความจำจำนวนมาก (24GB)
หากต้องการใช้แบ็กเอนด์ Rust คุณจะต้องมี Toolchain Rust เวอร์ชันล่าสุด ในการรวบรวมการรองรับ GPU คุณจะต้องติดตั้ง CUDA อย่างถูกต้องสำหรับ GPU ของคุณ โดยเฉพาะอย่างยิ่งกับ nvcc
API ที่ใช้ PyTorch สามารถพบได้ในไดเร็กทอรี moshi
มีเวอร์ชันสตรีมมิ่งของ audio tokenizer (mimi) และโมเดลภาษา (moshi)
เพื่อที่จะทำงานในโหมดโต้ตอบ คุณจะต้องเริ่มต้นเซิร์ฟเวอร์ที่จะรันโมเดล จากนั้นคุณสามารถใช้ UI ของเว็บหรือไคลเอ็นต์บรรทัดคำสั่งก็ได้
เริ่มต้นเซิร์ฟเวอร์ด้วย:
หลาม -m moshi.server [--gradio-tunnel] [--hf-repo kyutai/moshika-pytorch-bf16]
จากนั้นเข้าถึงเว็บ UI บน localhost:8998 หาก GPU ของคุณอยู่บนเครื่องที่อยู่ห่างไกล สิ่งนี้จะไม่ทำงานเนื่องจากเว็บไซต์ที่ใช้ http ไม่ได้รับอนุญาตให้ใช้ API เวิร์กเล็ตเสียง มีสองวิธีในการหลีกเลี่ยงสิ่งนี้:
ส่งต่อพอร์ตระยะไกล 8998 ไปยังโลคัลโฮสต์ของคุณโดยใช้แฟล็ก ssh -L
จากนั้นเชื่อมต่อกับ localhost:8998 ตามที่กล่าวไว้ก่อนหน้านี้
ใช้อาร์กิวเมนต์ --gradio-tunnel
ซึ่งจะตั้งค่าช่องสัญญาณด้วย URL ที่สามารถเข้าถึงได้จากทุกที่ โปรดทราบว่าอุโมงค์นี้ผ่านสหรัฐอเมริกาและสามารถเพิ่มเวลาแฝงได้อย่างมาก (สูงถึง 500ms จากยุโรป) คุณสามารถใช้ --gradio-tunnel-token
เพื่อตั้งค่าโทเค็นลับแบบคงที่ และใช้ที่อยู่เดิมซ้ำเมื่อเวลาผ่านไป
คุณสามารถใช้ --hf-repo
เพื่อเลือกโมเดลที่ได้รับการฝึกล่วงหน้าอื่น โดยตั้งค่าพื้นที่เก็บข้อมูล Hugging Face ที่เหมาะสม
การเข้าถึงเซิร์ฟเวอร์ที่ไม่ใช่ localhost ผ่าน http อาจทำให้เกิดปัญหาในการใช้ไมโครโฟนใน UI ของเว็บ (ในบางเบราว์เซอร์ อนุญาตให้ใช้ https เท่านั้น)
ลูกค้าท้องถิ่นก็มีให้บริการเช่นกัน
หลาม -m moshi.client [--url URL_TO_GRADIO]
อย่างไรก็ตาม โปรดทราบว่าไคลเอ็นต์นี้เป็นแบร์โบน ซึ่งต่างจากเว็บเบราว์เซอร์ โดยจะไม่ทำการยกเลิกเสียงสะท้อนใดๆ และจะไม่พยายามชดเชยความล่าช้าที่เพิ่มขึ้นด้วยการข้ามเฟรม
สำหรับข้อมูลเพิ่มเติม โดยเฉพาะวิธีใช้ API โดยตรง โปรดชำระเงินที่ moshi/README.md
เมื่อคุณติดตั้ง moshi_mlx
แล้ว คุณก็สามารถเรียกใช้ได้
python -m moshi_mlx.local -q 4 # น้ำหนักควอนตัมเป็น 4 bitspython -m moshi_mlx.local -q 8 # น้ำหนักควอนตัมเป็น 8 บิต# และใช้โมเดลที่ได้รับการฝึกล่วงหน้าอื่น:python -m moshi_mlx.local -q 4 --hf- รีโป คิวไต/moshika-mlx-q4 python -m moshi_mlx.local -q 8 --hf-repo kyutai/moshika-mlx-q8# โปรดใช้ความระมัดระวังเพื่อให้ตรงกับแฟล็ก `-q` และ `--hf-repo` เสมอ
อินเทอร์เฟซบรรทัดคำสั่งนี้เป็นแบร์โบนเช่นกัน ไม่มีการยกเลิกเสียงก้องใดๆ และไม่ได้พยายามชดเชยความล่าช้าที่เพิ่มขึ้นโดยการข้ามเฟรม
หรือคุณสามารถเรียกใช้ python -m moshi_mlx.local_web
เพื่อใช้ UI ของเว็บ การเชื่อมต่อผ่าน http และจะอยู่ที่ localhost:8998
ในการรันเซิร์ฟเวอร์การอนุมาน Rust ให้ใช้คำสั่งต่อไปนี้จากภายในไดเร็กทอรี rust
:
การเรียกใช้สินค้า --features cuda --bin moshi-backend -r -- --config moshi-backend/config.json แบบสแตนด์อโลน
เมื่อใช้ macOS คุณสามารถแทนที่ --features cuda
ด้วย --features metal
หรือคุณสามารถใช้ config-q8.json
แทน config.json
เพื่อใช้โมเดล q8 เชิงปริมาณได้ คุณสามารถเลือกโมเดลที่ได้รับการฝึกล่วงหน้าอื่นได้ เช่น Moshika โดยการเปลี่ยนคีย์ "hf_repo"
ในไฟล์ใดไฟล์หนึ่ง
เมื่อเซิร์ฟเวอร์พิมพ์ 'การรับฟังผู้ปฏิบัติงานแบบสแตนด์อโลน' แล้ว คุณจะสามารถใช้ UI ของเว็บได้ ตามค่าเริ่มต้น เซิร์ฟเวอร์ Rust จะใช้ https ดังนั้นจึงจะอยู่ที่ localhost:8998
คุณจะได้รับคำเตือนเกี่ยวกับไซต์ที่ไม่ปลอดภัย เมื่อใช้ Chrome คุณสามารถข้ามสิ่งเหล่านี้ได้โดยเลือก "รายละเอียด" หรือ "ขั้นสูง" จากนั้นเลือก "เยี่ยมชมไซต์ที่ไม่ปลอดภัยนี้" หรือ "ดำเนินการไปยัง localhost (ไม่ปลอดภัย)"
เราขอแนะนำให้ใช้ UI ของเว็บเนื่องจากมีการยกเลิกเสียงก้องเพิ่มเติมซึ่งจะช่วยคุณภาพโมเดลโดยรวม โปรดทราบว่าคำสั่งส่วนใหญ่จะให้บริการ UI นี้โดยตรงใน URL ที่ให้ไว้ และโดยทั่วไปแล้วจะไม่มีอะไรให้ทำอีกต่อไป
อีกทางหนึ่ง เรามีอินเทอร์เฟซบรรทัดคำสั่งสำหรับเวอร์ชัน Rust และ Python โปรโตคอลจะเหมือนกับ UI ของเว็บ ดังนั้นจึงไม่มีอะไรเปลี่ยนแปลงในฝั่งเซิร์ฟเวอร์
เพื่อเป็นข้อมูลอ้างอิง นี่คือรายชื่อลูกค้าของ Moshi
จากภายในไดเร็กทอรี rust
ให้รันสิ่งต่อไปนี้:
การขนส่งสินค้า --bin moshi-cli -r -- tui --host localhost
หลาม -m moshi.client
นักเทียบท่าเขียนขึ้น
ต้องใช้ NVIDIA Container Toolkit
สามารถสร้าง UI ของเว็บได้จาก repo นี้ผ่านขั้นตอนต่อไปนี้ (สิ่งเหล่านี้จะต้องติดตั้ง npm
)
ไคลเอนต์ซีดี ติดตั้ง npm บิลด์การรัน NPM
UI ของเว็บสามารถพบได้ในไดเร็กทอรี client/dist
หากคุณต้องการติดตั้งจากโคลนของที่เก็บนี้ หรืออาจจะเพื่อพัฒนา Moshi ต่อไป คุณสามารถทำสิ่งต่อไปนี้:
# จากรากของโคลนของการติดตั้ง repopip -e 'moshi[dev]'pip install -e 'moshi_mlx[dev]'pre-commit install
หากคุณต้องการสร้าง rustymimi
ในเครื่อง (สมมติว่าคุณติดตั้ง Rust อย่างถูกต้อง):
pip ติดตั้งมาตูริน สุกริน dev -r -m สนิม/mimi-pyo3/Cargo.toml
ชำระเงินส่วนคำถามที่พบบ่อยก่อนเปิดประเด็น
รหัสปัจจุบันมีให้ภายใต้ใบอนุญาต MIT สำหรับส่วน Python และใบอนุญาต Apache สำหรับแบ็กเอนด์ Rust รหัสไคลเอ็นต์ของเว็บมีให้ภายใต้ใบอนุญาต MIT โปรดทราบว่าบางส่วนของโค้ดนี้อิงจาก AudioCraft ซึ่งเผยแพร่ภายใต้ใบอนุญาต MIT
น้ำหนักสำหรับรุ่นต่างๆ ได้รับการเผยแพร่ภายใต้ใบอนุญาต CC-BY 4.0
หากคุณใช้ Mimi หรือ Moshi โปรดอ้างอิงเอกสารต่อไปนี้
@techreport{kyutai2024moshi, title={Moshi: a speech-text foundation model for real-time dialogue}, author={Alexandre D'efossez and Laurent Mazar'e and Manu Orsini and Am'elie Royer and Patrick P'erez and Herv'e J'egou and Edouard Grave and Neil Zeghidour}, year={2024}, eprint={2410.00037}, archivePrefix={arXiv}, primaryClass={eess.AS}, url={https://arxiv.org/abs/2410.00037}, }