2 poin oleh GN⁺ 2023-11-03 | 1 komentar | Bagikan ke WhatsApp
  • Talk-Llama adalah contoh whisper.cpp di mana saat Anda berbicara lewat mikrofon di terminal, Whisper mengubah suara menjadi teks dan LLaMA merespons
  • Untuk menangkap audio mikrofon diperlukan SDL2, dan saat build opsi CMake WHISPER_SDL2=ON harus diaktifkan
  • Saat menjalankan, tentukan model Whisper dengan -mw; untuk percakapan real-time, model base atau small direkomendasikan
  • Pada -ml, tentukan model LLaMA yang kompatibel dengan ggml; cara menyiapkan model mengikuti panduan llama.cpp
  • Dengan --session FILE, status model dapat disimpan dan dimuat kembali sehingga konteks tetap terjaga dalam percakapan panjang atau di beberapa kali eksekusi

Contoh percakapan suara di terminal

  • whisper.cpp/examples/talk-llama adalah contoh untuk bercakap-cakap dengan AI LLaMA lewat suara di terminal
  • Demo performa per 2 November 2023 ditampilkan berjalan di M2 Ultra dengan kombinasi Whisper Medium + LLaMA v2 13B Q8_0
  • Demo sebelumnya disediakan sebagai video terpisah untuk contoh eksekusi di CPU

Alur build dan eksekusi

  • whisper-talk-llama bergantung pada library SDL2 untuk menangkap audio mikrofon
  • Contoh instalasi SDL2 per sistem operasi adalah sebagai berikut
    • Linux turunan Debian: sudo apt-get install libsdl2-dev
    • Fedora Linux: sudo dnf install SDL2 SDL2-devel
    • Mac OS: brew install sdl2
  • Pada build CMake, aktifkan opsi WHISPER_SDL2=ON
    • cmake -B build -S . -DWHISPER_SDL2=ON
    • cmake --build build --config Release
  • Contoh eksekusi menetapkan model Whisper, model LLaMA, prompt, dan jumlah thread sekaligus
    • ./build/bin/whisper-talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8

Opsi penentuan model

  • Argumen -mw menentukan model Whisper yang akan digunakan
    • Untuk pengalaman real-time, model base atau small direkomendasikan
  • Argumen -ml menentukan model LLaMA yang akan digunakan
    • Untuk cara mendapatkan model LLaMA yang kompatibel dengan ggml, rujuk panduan llama.cpp

Melanjutkan konteks dengan file sesi

  • whisper-talk-llama mendukung manajemen sesi untuk percakapan yang lebih konsisten dan berkelanjutan
  • Dengan mempertahankan konteks dari interaksi sebelumnya, sistem dapat memahami dan menjawab permintaan pengguna secara lebih alami
  • Dukungan sesi diaktifkan saat eksekusi dengan opsi command-line --session FILE
    • Setelah setiap interaksi, status model whisper-talk-llama disimpan ke file yang ditentukan
    • Jika file belum ada, file baru akan dibuat
    • Jika file sudah ada, status model dimuat dari file tersebut untuk melanjutkan sesi sebelumnya
  • Ini berguna saat berinteraksi dengan AI assistant dalam percakapan panjang atau lintas beberapa sesi, karena dapat mengingat interaksi sebelumnya dan memberikan respons kontekstual yang lebih relevan
  • Contoh eksekusi:
    • ./build/bin/whisper-talk-llama --session ./my-session-file -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8

Output suara dan umpan balik

  • Untuk mendengarkan respons teks yang dihasilkan sebagai suara, diperlukan alat TTS
  • Anda dapat menggunakan engine TTS apa pun yang diinginkan, dan menyesuaikan skrip speak sesuai kebutuhan
  • Pengaturan default menggunakan say di MacOS atau SpeechSynthesizer di Windows
  • Umpan balik diarahkan ke GitHub Discussion #672

1 komentar

 
GN⁺ 2023-11-03
Komentar Hacker News
  • Menarik juga melihat ini di sini :)
    Dibandingkan yang ditampilkan di videonya, performa Apple Silicon sekarang pasti sudah jauh lebih baik. whisper.cpp kini berjalan sepenuhnya di GPU, dan kecepatan generasi llama.cpp juga meningkat pesat dalam beberapa bulan terakhir

    • Hanya butuh 13 menit sampai commit video demo baru, lumayan juga :D
      Performanya sendiri juga benar-benar mengesankan
    • Sepertinya sekarang Anda sudah cukup terkenal. Kemungkinan besar banyak orang yang rajin mengikuti GitHub Anda
    • Saya sudah mengirim PR untuk menaikkan demo baru ke posisi paling atas. Menurut saya demo barunya jauh lebih baik
    • Untuk menjalankan ini, apakah Apple Silicon yang paling hemat biaya, atau bisa dibuat lebih murah di server Linux homelab yang bertenaga?
    • Apakah ini juga akan berjalan di distilled Llama terbaru?
  • Keren. Dalam proyek terbaru saya, saya sempat menghubungkan Llama ke model sintesis suara open source, dan ada banyak aspek rekayasa yang menarik
    Menurut saya, alat bantu coding yang paling berguna bukanlah yang mencoba menggantikan pemikiran sulit atau pemecahan masalah, melainkan yang mengurangi beban kerja manual, misalnya dengan membuat argumen dan tipe dari docstring, atau sebaliknya. Untuk tugas yang lebih kompleks, ternyata kita tetap harus memberi titik awal yang cukup bagus pada alat bantu tersebut
    Saat coding saya cukup sering bicara sendiri, jadi kalau ada alat seperti ini yang bisa meng-embed ucapan saya sebagai vektor konteks untuk dipakai sebagai input tambahan dan memberi model titik awal yang lebih baik, itu akan terasa sangat futuristis dan berguna. Saya termasuk terlambat menerima Copilot dan tidak selalu memakainya, tapi kalau ada yang tahu sesuatu yang mirip, saya penasaran

  • Kalau usulan open weight itu benar-benar jadi kenyataan dalam 270 hari, mungkin beberapa bulan kemudian pada praktiknya malah bisa dilarang

    • Klaim itu tidak didukung oleh isi executive order Biden. Yang ada hanya permintaan kepada beberapa lembaga pemerintah untuk membuat kerangka evaluasi keamanan, melakukan evaluasi awal terhadap model open weight, dan menyerahkan rekomendasi kepada presiden dalam 270 hari
      Setidaknya dari yang saya temukan, sama sekali tidak ada isi tentang melarang model open weight. Saya juga tidak melihat alasan kuat kenapa rekomendasi akhirnya harus berisi “larang saja”
      Misalnya, saya masih bisa membayangkan rekomendasi yang menguntungkan pemain lama, seperti pemerintah membuat beban adopsi model open weight terlalu tinggi sehingga membeli OpenAI terlihat jauh lebih menarik. Tapi itu berbeda dari yang tadi dikatakan
      Executive order itu tampaknya cukup mudah dibaca, apakah ada bagian di teksnya yang saya lewatkan?
      https://www.whitehouse.gov/briefing-room/presidential-action...
    • Saya juga tidak melihat ada bagian yang menyebut bobot akan dilarang. Bagian yang saya lihat lebih mendekati instruksi untuk membuat laporan tentang risiko dan manfaat open weight
      Saya setuju bahwa pendekatan dengan ruang lingkup terbuka seperti ini memang mengkhawatirkan, tetapi letak larangan nyatanya di mana?
    • Seberapa serius ancaman ini? Bagaimana mungkin mereka menegakkan sesuatu yang sebodoh ini tanpa berdiskusi dulu dengan para pemimpin industri?
  • Di Arch dan Debian, menjalankan ./talk-llama memunculkan floating point exception. Saya sudah mengecek sdl2lib dan ffmpeg, dan juga melihat issue terkait (https://github.com/ggerganov/whisper.cpp/issues/1325), tetapi belum terpecahkan. Ada yang mengalami juga?

    • Saya sempat kesulitan dengan error yang sama di PopOS 22.04, dan ini membantu:
      https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
      Saya tidak yakin apa yang berubah, tetapi pada dasarnya saya menghapus ffmpeg dan libsdl2-dev, lalu menjalankan make dari root repositori. Setelah itu saya memasang libsdl2 dan ffmpeg, lalu menjalankan make talk-llama
      Di i7-8550U 4-core dengan RAM 16GB, ini cukup lambat
      Kurang lebih saya menjalankan ini dari root repositori:
      $ sudo apt purge ffmpeg
      $ make clean
      $ git pull
      $ make
      $ sudo apt install libsdl2-dev
      $ make talk-llama
      $ ./talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-2-13b.Q4_0.gguf -p "t0mk" -t 8\n\n
  • Apakah tidak ada solusi text-to-speech yang bisa menerima stream teks dan langsung membacakannya tanpa menunggu Llama selesai menghasilkan seluruh output?
    Sepertinya ini hanya mungkin kalau model bisa mengisi buffer cukup cepat sehingga mesin sintesis suara tidak terhenti

    • Kalau buffer tinggal satu kata, mungkin llama.cpp bisa dibuat mengeluarkan hal-hal seperti “um”, “uhh” :D
    • Untuk mencocokkan timing dan penekanan, akan lebih baik jika sistem tahu kalimatnya sedang menuju ke mana. Kalau tidak, hasilnya bisa terasa seperti rangkaian kata yang datar seperti penerjemah simultan PBB
    • ElevenLabs dan Gemelo.AI adalah layanan yang mendukung streaming input teks tepat untuk penggunaan seperti ini. Setahu saya belum ada model sintesis suara inkremental (Incremental TTS) open source, tetapi sesuatu yang mirip bisa dibuat dengan men-buffer token lalu mengirimkannya ke model sintesis suara saat tanda baca muncul
  • Apakah latensi bisa dikurangi jika kita tidak menunggu seluruh respons LLM selesai, lalu melakukan streaming ke sintesis suara dalam kelompok sekitar 6 token begitu token-token itu dihasilkan?

    • Ya, waktu itu memang ingin saya lakukan begitu, tetapi ada hal lain yang muncul. Contoh sederhana ini bisa ditingkatkan dengan berbagai cara
      Saat ini deteksi akhir ujaran hanya memakai ambang adaptif dasar, dan itu bisa dibuat lebih baik; LLM kecil juga bisa dipakai untuk menghasilkan respons umum yang cepat sementara LLM besar sedang menghitung. Sintesis suara juga bisa di-streaming per chunk atau per kalimat
      Salah satu versi open source yang lebih baik untuk chatbot semacam ini menurut saya adalah https://github.com/yacineMTB/talk. Mungkin sekarang juga sudah ada lebih banyak proyek serupa
  • Apa antarmuka chat terbaik untuk Llama? Saya punya 3090 dan ingin menjalankan satu model untuk pekerjaan coding cepat di terminal

    • ollama benar-benar mudah dipakai. Ini binary tunggal yang mengunduh model saat dibutuhkan, mirip seperti cara Docker mengambil image
      pacman -S ollama
      ollama serve
      ollama run llama2:13b 'insert prompt'
      https://ollama.ai/
    • Ada juga proyek open source yang mendukung suara:
      https://github.com/cogentapps/chat-with-gpt
      Sepertinya dibuat untuk memakai ElevenLabs dan OpenAI API, tetapi mungkin juga cukup mudah dikonfigurasi untuk Whisper.cpp dan Llama lokal
    • Ini bukan open source, tetapi lmstudio.ai masih gratis untuk sekarang. Ada riwayat chat, UI pengaturan yang lumayan bagus, pengelolaan prompt yang mudah, pengelolaan dan penjelajahan model, pengaturan sederhana, lintas platform, bahkan fitur server API untuk terhubung dengan alat lain
      Mereka sedang merekrut dan belum punya strategi monetisasi yang dipublikasikan, jadi saya menduga akan ada perubahan seperti sebagian fitur gratis dijadikan berbayar atau sengaja dibatasi. Meski begitu, untuk aplikasi tipis gratis bagi LLM yang sepenuhnya bergantung pada llama.cpp, akan sulit menciptakan ketergantungan vendor. Jika open source lebih penting daripada fitur, saya juga akan merekomendasikan ollama
    • Yang paling mudah disetel adalah ini: https://faraday.dev/
      Untuk pertanyaan teknis, menurut saya Wizard sedang paling populer saat ini
    • “Terbaik” artinya bisa berbeda-beda. Jika yang dimaksud adalah inferensi mutakhir tercepat semaksimal mungkin, maka itu ExLlama atau ExLlamaV2 di 4090
  • Saya sangat puas dengan ollama untuk menjalankan LLM open source lokal, tetapi apa padanannya untuk Whisper atau model sintesis suara open source terbaru? Saya belum tahu proyek yang membuat Whisper semudah itu untuk disetel secara lokal

  • Bisa jelaskan dengan mudah apa yang bisa dilakukan ini? Apakah ini bisa mempelajari dan mempertahankan konteks chat sambil membangun semacam memori jangka panjang?

    • Saya bukan ahli LLM, tetapi dari pemahaman saya, strukturnya adalah menjalankan pengenalan suara → Llama → sintesis suara di PC sendiri, bukan di server pihak ketiga
      Batas konteks LLM bergantung pada model dan pengaturan yang dipilih pengguna. Misalnya, itu bergantung pada model yang dipakai, seperti Llama 2 atau Wizard Vicuna, dan bagaimana jendela konteksnya diatur. LLM bukan benar-benar “menjawab” pengguna; yang dilakukannya adalah memprediksi kelanjutan paling masuk akal dari catatan percakapan antara pengguna dan assistant yang berguna, lalu hasilnya berhasil berpura-pura menjadi assistant yang berguna hingga benar-benar menjadi assistant yang berguna, jadi ini bisa membingungkan
      Jika pipeline-nya diubah, perilaku seperti itu tampaknya mungkin dilakukan. Strukturnya menjadi pengenalan suara → Wrapper[Llama] → sintesis suara, dan akan menarik jika Wrapper bisa membiarkan Llama melakukan bagiannya sambil menambahkan pemrosesan ekstra pada teks masukan
      Wrapper itu bisa menganalisis percakapan dan mengekstrak poin-poin penting seperti “nama orang ini Bob, laki-laki, 35 tahun, suka anjing dan hal-hal yang rapi, ingin diingatkan untuk menelepon putrinya pada pukul 5 sore, adalah agen infiltrasi mafia Antarktika, dan lebih suka diajak bicara dengan aksen Polandia yang kental”, lalu bertindak berdasarkan itu
      Misalnya, ia bisa membuat pengingat pukul 5 sore lewat HomeAssistant, mengatur mesin sintesis suara ke aksen Polandia, dan memodifikasi riwayat percakapan awal untuk sesi berikutnya
      Dengan kata lain, ia bisa memasukkan nama orang itu ke percakapan internal dan memberi ringkasan minat serta kepribadiannya di pengantar awal percakapan berikutnya
      Dengan begitu, interaktivitas muncul lewat tindakan yang dijalankan alat lain, dan kesinambungan juga bisa dibuat dengan memodifikasi riwayat percakapan berikutnya
  • Ini benar-benar memberi nuansa ELIZA yang kuat