2 điểm bởi GN⁺ 2023-11-03 | 1 bình luận | Chia sẻ qua WhatsApp
  • Talk-Llama là một ví dụ của whisper.cpp: khi bạn nói vào micro trong terminal, Whisper sẽ chuyển giọng nói thành văn bản và LLaMA sẽ phản hồi
  • Cần SDL2 để thu âm thanh từ micro, và khi build phải bật tùy chọn CMake WHISPER_SDL2=ON
  • Khi chạy, dùng -mw để chỉ định mô hình Whisper; với hội thoại thời gian thực, khuyến nghị dùng mô hình base hoặc small
  • Với -ml, chỉ định mô hình LLaMA tương thích ggml; cách chuẩn bị mô hình được hướng dẫn theo llama.cpp
  • Dùng --session FILE để lưu/tải trạng thái mô hình, cho phép duy trì ngữ cảnh qua các cuộc trò chuyện dài hoặc nhiều lần chạy

Ví dụ hội thoại giọng nói trong terminal

  • whisper.cpp/examples/talk-llama là ví dụ để trò chuyện bằng giọng nói với AI LLaMA trong terminal
  • Tính đến ngày 2 tháng 11 năm 2023, bản demo hiệu năng được ghi là chạy trên M2 Ultra với tổ hợp Whisper Medium + LLaMA v2 13B Q8_0
  • Bản demo trước đó được cung cấp dưới dạng video riêng như một trường hợp chạy bằng CPU

Quy trình build và chạy

  • whisper-talk-llama phụ thuộc vào thư viện SDL2 để thu âm thanh từ micro
  • Ví dụ cài đặt SDL2 theo từng hệ điều hành như sau
    • Linux họ Debian: sudo apt-get install libsdl2-dev
    • Fedora Linux: sudo dnf install SDL2 SDL2-devel
    • Mac OS: brew install sdl2
  • Trong quá trình build bằng CMake, bật tùy chọn WHISPER_SDL2=ON
    • cmake -B build -S . -DWHISPER_SDL2=ON
    • cmake --build build --config Release
  • Ví dụ chạy chỉ định cùng lúc mô hình Whisper, mô hình LLaMA, prompt và số luồng
    • ./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

Tùy chọn chỉ định mô hình

  • Đối số -mw dùng để chỉ định mô hình Whisper sẽ sử dụng
    • Với trải nghiệm thời gian thực, khuyến nghị dùng mô hình base hoặc small
  • Đối số -ml dùng để chỉ định mô hình LLaMA sẽ sử dụng
    • Để biết cách lấy mô hình LLaMA tương thích ggml, hãy tham khảo hướng dẫn của llama.cpp

Tiếp nối ngữ cảnh bằng tệp session

  • whisper-talk-llama hỗ trợ quản lý session để có các cuộc hội thoại nhất quán và liên tục hơn
  • Có thể giữ ngữ cảnh của các tương tác trước đó để hiểu yêu cầu của người dùng và phản hồi tự nhiên hơn
  • Hỗ trợ session được kích hoạt bằng tùy chọn dòng lệnh --session FILE khi chạy
    • Sau mỗi lần tương tác, trạng thái mô hình của whisper-talk-llama sẽ được lưu vào tệp đã chỉ định
    • Nếu tệp chưa tồn tại thì sẽ được tạo mới
    • Nếu tệp đã tồn tại thì trạng thái mô hình sẽ được tải từ đó để tiếp tục session trước
  • Hữu ích khi tương tác với AI assistant qua các cuộc hội thoại dài hoặc nhiều session, giúp ghi nhớ tương tác trước đó và đưa ra phản hồi ngữ cảnh phù hợp hơn
  • Ví dụ chạy:
    • ./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

Đầu ra giọng nói và phản hồi

  • Cần một công cụ TTS để nghe phản hồi văn bản được tạo ra dưới dạng giọng nói
  • Có thể dùng bất kỳ engine TTS nào mong muốn, và chỉnh sửa script speak cho phù hợp với nhu cầu
  • Cấu hình mặc định sử dụng say của MacOS hoặc SpeechSynthesizer trên Windows
  • Có thể gửi phản hồi trong GitHub Discussion #672

1 bình luận

 
GN⁺ 2023-11-03
Ý kiến trên Hacker News
  • Thấy ở đây thú vị thật :)
    So với trong video thì hiện nay hiệu năng Apple Silicon chắc đã tốt hơn nhiều rồi. whisper.cpp giờ đã chạy hoàn toàn trên GPU, và trong vài tháng qua tốc độ sinh của llama.cpp cũng được cải thiện đáng kể

    • Từ commit đến video demo mới chỉ mất 13 phút, không tệ :D
      Thực tế hiệu năng cũng ấn tượng
    • Có vẻ giờ anh/chị khá nổi tiếng rồi. Rất có khả năng có nhiều người theo dõi GitHub sát sao
    • Tôi đã gửi PR để đưa demo mới lên đầu. Tôi nghĩ demo mới tốt hơn nhiều
    • Để chạy cái này thì Apple Silicon có phải là lựa chọn hiệu quả chi phí nhất không, hay có thể làm rẻ hơn trên một máy chủ homelab Linux hiệu năng tốt?
    • Nó có chạy được với distilled Llama mới nhất không?
  • Hay thật. Trong một dự án gần đây, tôi đã thử nối Llama với một mô hình tổng hợp giọng nói mã nguồn mở, và có nhiều yếu tố kỹ thuật thú vị
    Cá nhân tôi thấy công cụ hỗ trợ lập trình hữu ích nhất là những công cụ giảm gánh nặng thao tác thủ công, chẳng hạn tạo tham số và kiểu từ docstring hoặc ngược lại, thay vì cố thay tôi tư duy khó hay giải quyết vấn đề. Với các tác vụ phức tạp hơn, có vẻ phải đưa cho công cụ hỗ trợ một điểm khởi đầu khá tốt
    Tôi thường tự nói một mình khi lập trình, nên nếu một công cụ như thế này có thể nhúng lời nói của tôi thành vector ngữ cảnh để dùng làm đầu vào bổ sung và cho mô hình một điểm khởi đầu tốt hơn, thì thật sự sẽ rất tương lai và hữu ích. Tôi thuộc nhóm dùng Copilot khá muộn và không phải lúc nào cũng dùng, nhưng nếu ai biết thứ gì tương tự thì tôi rất muốn nghe

  • Nếu đề xuất trọng số mở trở thành hiện thực trong vòng 270 ngày, có thể vài tháng nữa nó gần như bị cấm

    • Lập luận đó không được nội dung sắc lệnh hành pháp của Biden củng cố. Chỉ có yêu cầu nhiều cơ quan chính phủ xây dựng khung đánh giá an toàn, thực hiện đánh giá ban đầu đối với các mô hình trọng số mở, và trong vòng 270 ngày nộp khuyến nghị cho tổng thống
      Theo những gì tôi tìm được, hoàn toàn không có nội dung nào cấm các mô hình trọng số mở. Tôi cũng không thấy có nhiều lý do để khuyến nghị cuối cùng lại có câu “hãy cấm”
      Ví dụ, có thể hình dung các khuyến nghị có lợi cho những doanh nghiệp hiện hữu, kiểu như chính phủ khiến gánh nặng áp dụng mô hình trọng số mở quá cao đến mức việc mua OpenAI trông hấp dẫn hơn nhiều. Nhưng chuyện đó khác với điều được nói ban đầu
      Sắc lệnh hành pháp có vẻ khá dễ đọc; tôi có bỏ sót gì trong văn bản không?
      https://www.whitehouse.gov/briefing-room/presidential-action...
    • Tôi không thấy chỗ nào nói trọng số sẽ bị cấm. Phần tôi thấy gần với việc yêu cầu lập báo cáo về rủi ro và lợi ích của trọng số mở hơn
      Tôi đồng ý rằng cách phạm vi được để mở là đáng lo, nhưng lệnh cấm thực tế nằm ở đâu?
    • Mối đe dọa này nghiêm trọng đến mức nào? Làm sao họ có thể thực thi một thứ ngu ngốc như vậy mà không tham khảo ý kiến các lãnh đạo trong ngành?
  • Trên Arch và Debian, chạy ./talk-llama thì gặp lỗi floating point exception. Tôi cũng đã kiểm tra sdl2libffmpeg, xem cả issue liên quan (https://github.com/ggerganov/whisper.cpp/issues/1325) nhưng vẫn chưa giải quyết được. Có ai khác gặp không?

    • Tôi cũng vật lộn với lỗi tương tự trên PopOS 22.04, và cái này đã giúp:
      https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
      Tôi không chắc chính xác điều gì đã thay đổi, nhưng về cơ bản tôi đã gỡ ffmpeglibsdl2-dev, rồi chạy make ở thư mục gốc của repo. Sau đó cài libsdl2ffmpeg, rồi chạy make talk-llama
      Trên i7-8550U 4 nhân và RAM 16GB thì khá chậm
      Đại khái tôi đã làm như sau ở thư mục gốc của repo:
      $ 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
  • Không có giải pháp chuyển văn bản thành giọng nói nào nhận luồng văn bản và đọc ngay, thay vì chờ Llama sinh xong à?
    Có lẽ chỉ khả thi khi mô hình lấp đầy buffer đủ nhanh để engine tổng hợp giọng nói không bị dừng

    • Chỉ cần để llama.cpp phát ra mấy tiếng như “um”, “uhh” khi buffer chỉ còn một từ là được :D
    • Cần biết câu sẽ đi về đâu thì nhịp và trọng âm mới khớp tốt hơn. Nếu không, có thể sẽ nghe như phiên dịch viên Liên Hợp Quốc đọc các từ nối tiếp nhau một cách đều đều
    • ElevenLabs và Gemelo.AI là các dịch vụ hỗ trợ streaming đầu vào văn bản đúng cho mục đích này. Theo tôi biết thì không có mô hình tổng hợp giọng nói tăng dần (Incremental TTS) mã nguồn mở nào, nhưng có thể triển khai gần tương tự bằng cách buffer token rồi khi gặp dấu câu thì gửi sang mô hình tổng hợp giọng nói
  • Đừng chờ toàn bộ phản hồi LLM kết thúc; nếu stream phần tổng hợp giọng nói ngay khi được tạo theo từng cụm khoảng 6 token thì có giảm được độ trễ không?

    • Có, lúc đó tôi định làm như vậy nhưng lại có việc khác phát sinh. Ví dụ đơn giản này có thể được cải thiện theo nhiều cách
      Hiện tại có thể cải thiện phát hiện kết thúc lượt nói, vốn chỉ dùng ngưỡng thích ứng cơ bản; cũng có thể để một LLM nhỏ tạo các phản hồi nhanh thông thường trong khi LLM lớn đang tính toán. Phần tổng hợp giọng nói cũng có thể được stream theo chunk hoặc theo câu
      Tôi cho rằng một trong những phiên bản mã nguồn mở tốt hơn của kiểu chatbot này là https://github.com/yacineMTB/talk. Hiện giờ nhiều khả năng cũng đã có thêm nhiều dự án tương tự
  • Giao diện chat tốt nhất cho Llama là gì? Tôi có một chiếc 3090 nên muốn chạy thử một model trong terminal cho các tác vụ lập trình nhanh

    • ollama thật sự rất dễ dùng. Nó là một binary duy nhất, tải model khi cần, tương tự cách Docker tải image
      pacman -S ollama
      ollama serve
      ollama run llama2:13b 'insert prompt'
      https://ollama.ai/
    • Có một dự án mã nguồn mở cũng hỗ trợ giọng nói:
      https://github.com/cogentapps/chat-with-gpt
      Có vẻ nó được làm để dùng ElevenLabs và OpenAI API, nhưng cũng có thể khá dễ cấu hình cho Whisper.cpp và Llama chạy cục bộ
    • Không phải mã nguồn mở, nhưng hiện vẫn miễn phí, có lmstudio.ai. Nó có lịch sử chat, UI cấu hình ổn, quản lý prompt dễ, quản lý và khám phá model, thiết lập đơn giản, đa nền tảng, và cả chức năng API server để kết nối với công cụ khác
      Họ đang tuyển dụng và chưa có chiến lược kiếm tiền công khai, nên tôi đoán sớm muộn cũng sẽ có thay đổi kiểu đưa một số tính năng miễn phí vào gói trả phí hoặc cố ý giới hạn chúng. Dù vậy, các ứng dụng mỏng cho LLM miễn phí phụ thuộc hoàn toàn vào llama.cpp khó mà tạo được khóa chặt nhà cung cấp. Nếu ưu tiên mã nguồn mở hơn tính năng, tôi cũng sẽ khuyên dùng ollama
    • Cái dễ thiết lập nhất là cái này: https://faraday.dev/
      Với câu hỏi kỹ thuật, tôi nghĩ hiện Wizard đang là lựa chọn thịnh hành
    • Còn tùy “tốt nhất” nghĩa là gì. Nếu là suy luận tối tân nhanh nhất có thể, thì trên 4090 là ExLlama hoặc ExLlamaV2
  • Tôi rất hài lòng với ollama để chạy LLM mã nguồn mở cục bộ, vậy thứ tương đương với nó cho Whisper hoặc các model tổng hợp giọng nói mã nguồn mở mới nhất là gì? Tôi không biết dự án nào giúp thiết lập Whisper cục bộ đơn giản như vậy

  • Có thể giải thích đơn giản thứ này làm được gì không? Nó có thể học ngữ cảnh cuộc chat và duy trì nó, rồi tích lũy một kiểu trí nhớ dài hạn nào đó không?

    • Tôi không phải chuyên gia LLM, nhưng theo hiểu biết của tôi, đây là cấu trúc chạy nhận dạng giọng nói → Llama → tổng hợp giọng nói trên PC của bạn, thay vì trên máy chủ bên thứ ba
      Giới hạn ngữ cảnh của LLM phụ thuộc vào model và cấu hình mà người dùng chọn. Ví dụ, tùy bạn dùng model nào như Llama 2, Wizard Vicuna, v.v., và cấu hình cửa sổ ngữ cảnh ra sao. LLM không hẳn “trả lời” người dùng, mà dự đoán nội dung tiếp theo hợp lý nhất trong lịch sử hội thoại giữa người dùng và một assistant hữu ích; kết quả là nó thành công trong việc giả làm một assistant hữu ích và thực sự trở thành một assistant hữu ích, nên điều này có thể gây nhầm lẫn
      Nếu thay đổi pipeline thì có vẻ hành vi như vậy cũng có thể làm được. Cấu trúc sẽ thành nhận dạng giọng nói → Wrapper[Llama] → tổng hợp giọng nói, và nếu Wrapper để Llama làm việc của nó đồng thời áp thêm xử lý lên văn bản đầu vào, mọi thứ sẽ trở nên thú vị
      Wrapper có thể phân tích cuộc trò chuyện, trích ra các yếu tố cốt lõi như “người này tên Bob, nam, 35 tuổi, thích chó và thích mọi thứ ngăn nắp, muốn được nhắc gọi cho con gái lúc 5 giờ chiều, là đặc vụ nằm vùng của mafia Nam Cực, và thích được nói chuyện bằng giọng Ba Lan nặng”, rồi hành động theo đó
      Ví dụ, nó có thể tạo nhắc nhở lúc 5 giờ chiều qua HomeAssistant, đặt engine tổng hợp giọng nói sang giọng Ba Lan, và chỉnh sửa lịch sử hội thoại khởi đầu cho các lần chạy sau. Chẳng hạn đưa tên người vào cuộc hội thoại nội bộ, rồi cung cấp bản nén các mối quan tâm và tính cách trong phần giới thiệu trước của cuộc trò chuyện tiếp theo
      Làm như vậy có thể tạo ra tính tương tác thông qua các hành động do công cụ khác thực hiện, đồng thời tạo tính liên tục bằng cách chỉnh sửa lịch sử cuộc trò chuyện tiếp theo
  • Cái này thật sự mang đậm cảm giác ELIZA