2 điểm bởi GN⁺ 2023-12-14 | 1 bình luận | Chia sẻ qua WhatsApp
  • Chạy mô hình Whisper large bằng framework MLX dành cho Apple Silicon để so sánh khoảng cách giữa laptop và GPU hiệu năng cao trong tác vụ chép lời đoạn âm thanh 10 phút
  • Ở điều kiện mặc định, M1 Pro MacBook mất 216 giây, RTX 4090 mất 186 giây, tức RTX 4090 nhanh hơn khoảng 30 giây, tương đương khoảng 16%
  • Khi dùng insanely-fast-whisper trên RTX 4090, việc chép lời bằng whisper-large-v3 giảm xuống còn 8 giây, cho thấy tối ưu hóa mô hình và triển khai có thể làm thay đổi đáng kể phép so sánh phần cứng
  • Chạy bằng MPS trên macOS mất 4 phút 23 giây; M2 Ultra 76 lõi GPU và M3 Max 40 lõi GPU nhanh hơn M1 rất nhiều và có tốc độ tương đương nhau
  • Mức tăng điện năng so với khi nhàn rỗi là +242W với PC RTX 4090 và +38W với M1 Pro MacBook; toàn bộ kết quả là phép so sánh để cảm nhận hiệu năng MLX, không phải benchmark chính xác

Chạy benchmark Whisper bằng MLX

  • Apple đã công bố MLX, framework học máy dành cho Apple Silicon, và Whisper trong các ví dụ đi kèm được dùng để benchmark
  • Thêm một tệp mới vào kho benchmark Whisper hiện có, rồi chép lời cùng một tệp âm thanh bằng mô hình whisper large đã tải về trước đó
  • Mã thực thi gọi transcribe(audio=audio_file, model='large'), sau đó đo tổng thời gian bằng chênh lệch giữa thời điểm bắt đầu và kết thúc
  • Kết quả trả về là danh sách các segment; mỗi segment gồm các trường như avg_logprob, compression_ratio, start, end, text, tokens
  • Cấu trúc kết quả này giống với khi chạy Python Whisper trên RTX 4090

Kết quả mặc định: M1 Pro và RTX 4090

  • Với tệp âm thanh 10 phút, thời gian chạy của M1 Pro + MLX0:03:36.296329, khoảng 216 giây
  • Trên cùng tệp đó, thời gian chạy của Nvidia RTX 4090 được đo là 0:03:06.707770, khoảng 186 giây
  • RTX 4090 nhanh hơn M1 Pro khoảng 30 giây, tương đương nhanh hơn khoảng 16%
  • Trong lúc đo, toàn bộ lõi đồ họa của M1 Pro được sử dụng hết; các chương trình khác được đóng và cả những thành phần như hình nền desktop cũng bị vô hiệu hóa
  • Tuy nhiên, nếu dùng mô hình tối ưu hóa cho Nvidia, thời gian chép lời của RTX 4090 có thể giảm xuống còn 8 giây

Phần cứng thử nghiệm

  • MacBook

    • MacBook M1 Pro 14 inch, mẫu năm 2021
    • 8 lõi CPU: 6 lõi hiệu năng, 2 lõi tiết kiệm điện
    • RAM 32GB
    • 16 lõi GPU
  • PC

    • Intel Core i7-12700KF 8×3.60GHz
    • RAM 2×32GB 3200MHz DDR4 Kingston FURY Beast
    • SSD Kingston KC3000 PCIe 4.0 NVMe 1000GB
    • Đọc 7000MB/s, ghi 6000MB/s
    • GeForce RTX 4090 24GB GDDR6X, Palit RTX 4090 GameRock OmniBlack

insanely-fast-whisper đã làm thay đổi phép so sánh

  • Trong bình luận trên Hacker News, có kết quả chạy cùng tệp 10 phút bằng insanely-fast-whisper và RTX 4090
  • Với whisper-large-v3, việc chép lời hoàn tất trong chưa đến 8 giây; nếu tính cả thời gian tải mô hình trước khi bắt đầu chép lời thì là 15 giây
  • Sau đó, khi chạy trực tiếp lệnh insanely-fast-whisper --file-name audio.mp3 --flash True, thời gian chép lời 8 giây cũng được xác nhận
  • Nhật ký đầu ra có cảnh báo liên quan đến Flash Attention 2 và cảnh báo về việc chuyển sang GPU, nhưng quá trình chép lời hoàn tất và tạo ra output.json
  • Trên macOS có thể chạy với --device mps --batch-size 4, và mất 0:04:23 để chép lời cùng tệp

Cập nhật M2 Ultra và M3 Max

  • Ivan đã chạy cùng tệp âm thanh trên M2 Ultra 76 lõi GPUM3 Max 40 lõi GPU
  • Cả hai hệ thống đều cho kết quả nhanh hơn M1 Pro rất nhiều và có tốc độ tương đương nhau
  • Các số liệu so sánh khó có thể xem là benchmark chính xác 100%; các tiến trình khác, thời gian tải, cold start và warm start đều có thể ảnh hưởng đến kết quả

Mức tiêu thụ điện và giới hạn đo lường

  • Chênh lệch điện năng giữa trạng thái nhàn rỗi và khi chạy GPU được đo bằng ổ cắm Shelly
  • PC tăng +242W so với khi nhàn rỗi lúc chạy RTX 4090
  • MacBook tăng +38W so với khi nhàn rỗi lúc chạy GPU M1 16 lõi
  • Phép đo điện năng cũng gần với giá trị tham khảo cho thấy xu hướng hơn là con số chính xác 100%
  • Toàn bộ thử nghiệm là phép so sánh nhằm cho thấy sơ bộ framework MLX có thể đạt hiệu năng đến mức nào, hơn là một phép đo khoa học

Bối cảnh sử dụng thực tế

  • Mục đích thử nghiệm liên quan đến việc vận hành công cụ tìm kiếm podcast podpodgogo.com
  • Chép lời hàng chục nghìn tập podcast, cho phép tìm kiếm toàn văn và thực hiện một số tác vụ khai phá dữ liệu
  • Lịch sử cập nhật
    • 11 tháng 12: bổ sung thông số phần cứng và các thử nghiệm bổ sung không tính tải mô hình
    • 12 tháng 12: mô tả RTX 4090 là card đồ họa tiêu dùng nhanh nhất và cập nhật số liệu M2/M3
    • 13 tháng 12: xác nhận bình luận trên Hacker News liên quan đến Whisper tối ưu hóa cho Nvidia

1 bình luận

 
GN⁺ 2023-12-14
Ý kiến trên Hacker News
  • Nếu không phải là họ đã chạy Whisper trên 4090 theo cách cực kỳ kém hiệu quả, thì kết quả này trông đáng nghi
    Tôi có 3090 và M1 Max 32GB; chưa thử Whisper, nhưng chênh lệch hiệu năng suy luận với Llama và Stable Diffusion là rất lớn, đặc biệt với SDXL trong Stable Diffusion thì 3090 mất khoảng 9 giây, còn M1 Max mất khoảng 1 phút 10 giây

    • Bạn đang lấy số liệu suy luận của mô hình khuếch tán tiềm ẩn như SDXL rồi khái quát hóa sang suy luận của Transformer mã hóa-giải mã như Whisper
      Hai kiến trúc mô hình này gần như không có nhiều điểm chung; dù Stable Diffusion có dùng bộ mã hóa văn bản được tiền huấn luyện của CLIP, nó cũng khá khác với Transformer mã hóa-giải mã
    • Việc tối ưu Whisper trên Apple Silicon đã được thực hiện khá nhiều, và whisper.cpp là một ví dụ tận dụng tốt lợi thế đó
      Hơn nữa bài này nói về framework MLX mới của Apple, nên rất có khả năng nó chưa được dùng trong các bài kiểm thử Llama hay Stable Diffusion
    • Dù tài liệu vẫn còn ở giai đoạn đầu, nhìn vào tài liệu MLX thì tích chập, thứ được dùng nhiều trong GAN và đặc biệt là Stable Diffusion, hầu như không thấy cải thiện đáng kể trong MLX, và trong một số trường hợp còn có vẻ chậm hơn CPU
      Không rõ đó là giới hạn phần cứng hay do thư viện MLX chưa được tối ưu đủ, nhưng có lẽ họ sẽ không bỏ qua một use case nổi bật như vậy
      Khả năng hợp lý hơn là tích chập dùng độ chính xác cao và tập tile lớn hơn nhiều, khiến khi toàn bộ phép biến đổi không vừa với GPU thì cần chuyển ngữ cảnh tốn kém
    • Tôi có 4090 và M1 Max 64GB, và với Llama 2 thì 4090 vượt trội hơn nhiều
    • Sau khi dùng Whisper khá nhiều, tôi thấy có những phiên bản ở cùng chất lượng nhưng dùng ít bộ nhớ hơn và hiệu năng tốt hơn một đến hai bậc độ lớn, mà tôi không hoàn toàn hiểu lý do
      Vì vậy nếu không phải cùng phần mềm và cùng mô hình, trực giác về hiệu năng Whisper cần hết sức thận trọng
      Ngay cả khi giống nhau, việc ai cũng muốn tối ưu theo từng nền tảng cho thấy ý nghĩa so sánh vẫn còn hạn chế
  • Cái này có vẻ dùng kho OpenAI Whisper
    Để so sánh cho đúng, nên so faster-whisper hoặc insanely-fast-whisper trên 4090 với MLX
    faster-whisper chạy tuần tự, còn insanely-fast-whisper xử lý bằng cách gom âm thanh thành các đoạn 30 giây
    Tôi đang dùng Whisper trong production, và vì thấy chất lượng tốt hơn khi bao gồm văn bản của đoạn trước đó nên tôi dùng faster-whisper
    Đại khái faster-whisper thường nhanh hơn OpenAI/whisper 4–5 lần, còn insanely-fast-whisper có thể lại nhanh hơn faster-whisper 3–4 lần

    • Tôi tò mò liệu insanely-fast-whisper có đủ nhanh để chuyển lời nói thành văn bản theo thời gian thực ngay cả trên CPU không
      Các mô hình ở đây dường như vẫn là fp16 chứ không phải mô hình lượng tử hóa, nên có vẻ vẫn còn dư địa để nhanh hơn
      Sửa: tôi thấy hiện chưa hỗ trợ suy luận trên CPU; nếu được thêm vào thì sẽ thú vị
    • Tôi tò mò insanely-fast-whisper dùng beam size 5 hay 1
      Tôi cũng muốn biết so sánh tốc độ khi đặt là 5, và lý tưởng nhất là nên expose tham số đó cho người dùng
      Tôi đang xử lý âm thanh có chất lượng rất tệ nên chất lượng transcription rất quan trọng; các so sánh tốc độ đánh đổi chất lượng không có nhiều ý nghĩa với tôi
  • Điểm cốt lõi của bài này là nó tận dụng Apple MLX mới được công bố, và mã sử dụng các tối ưu riêng cho Apple
    https://news.ycombinator.com/item?id=38539153

    • Nó cũng không được so với một triển khai Nvidia đã tối ưu
      Whisper có những triển khai nhanh hơn
      Sửa: nhân tiện bị câu view, tôi đã tải file 10 phút được dùng trong bài và chạy bằng insanely-fast-whisper trên 4090; cài đặt chỉ cần hai lệnh
      Với whisper-large-v3, việc transcription file hoàn tất trong chưa tới 8 giây; nếu tính cả thời gian tải mô hình trước khi bắt đầu transcription thì là 15 giây
      Phần thời gian cộng thêm này tất nhiên không phụ thuộc vào độ dài âm thanh
      Như vậy 4090 nhanh hơn hiệu năng cao nhất của Apple 6–12 lần
      Nếu đã có một PC gaming để cắm card thì rẻ hơn M2 Ultra rất nhiều, và ngay cả khi mua mới một PC lắp sẵn có 4090 thì vẫn rẻ hơn
      Điều này không có gì đáng ngạc nhiên, nhưng tôi thấy nhiều suy nghĩ mang tính ước vọng từ những người có Mac cao cấp muốn tin rằng thiết bị của mình giỏi mọi thứ
      Chip Apple M-series rất ấn tượng và RAM lớn cũng tuyệt vời, nhưng trong machine learning hiệu năng cao thì khó cạnh tranh với Nvidia
    • Thành thật mà nói tôi không hiểu vì sao phải bận tâm
      Nếu có Mac thì bạn sẽ dùng hiệu năng của chiếc Mac đó, còn nếu có PC gaming thì bạn sẽ dùng hiệu năng của chiếc PC đó
      Dù có cả hai, cuối cùng bạn vẫn có khả năng dùng AI chạy trên thiết bị mình sử dụng hằng ngày
  • Tò mò không biết nếu so với insanely-fast-whisper thì sẽ thế nào: https://github.com/Vaibhavs10/insanely-fast-whisper
    Tôi hiểu là nếu không dùng tối ưu hóa thì có thể so sánh 1:1, nhưng nếu phần tối ưu đó chưa được port sang MLX thì có lẽ vẫn nên dùng 4090 hơn
    Gần đây tôi có xem qua MLX; trên Mac chắc chắn có vẻ sẽ trở nên phổ biến, và nếu có Swift binding thì trên iOS cũng có thể như vậy: https://github.com/ml-explore/mlx/issues/15
    Tuy nhiên hiện tại có thể đang bị chặn bởi vấn đề biên dịch C++20

    • Điểm mạnh của Nvidia chính là chỗ này
      Dù phần cứng nào thắng trong benchmark, nếu là mô hình phổ biến thì thường sẽ có bản triển khai CUDA được tối ưu thủ công cực mạnh, áp đảo phần còn lại
      Cũng có vài ngoại lệ hiếm, chẳng hạn nhờ PyTorch đầu tư vào torch.compile nên GPT-Fast trên AMD chạy tốt trong một số trường hợp sử dụng rất hẹp
      Trên Apple Silicon thì tôi không nghĩ ra được ngoại lệ nào như vậy
    • Muốn so sánh cho đúng thì phải chạy mã insanely-fast-whisper trên 4090
      Tôi nghĩ nó sẽ dễ dàng thắng cả hai benchmark trong bài gốc, nhưng có lẽ cần đặt kích thước batch nhỏ hơn nhiều so với 24
      Theo tiêu chuẩn hiện nay, Whisper chạy nhanh gấp 3–4 lần thời gian thực là rất chậm, nên benchmark này có thể thắng được ngay cả bằng CPU
    • Bài viết đã được cập nhật với kết quả insanely-fast
  • Tôi tò mò liệu điều này có áp dụng cho các mô hình khác không, hay đây là trường hợp được chọn vì tính chất tuần tự và phép toán số nguyên của Whisper
    Nhìn vào https://github.com/ml-explore/mlx-examples/tree/main/stable_... thì có vẻ ám chỉ theo hướng đó

    At the time of writing this comparison convolutions are still some of the least optimized operations in MLX.
    Điểm mấu chốt có vẻ là có thể dùng hơn 64GB RAM rất nhanh gắn trực tiếp với CPU/GPU, đồng thời có lợi thế về độ trễ và khả năng truy cập chung
    Nhìn vào gói điện năng của các hệ thống này thì các con số đúng là ấn tượng
    Tuy vậy cũng cần cân nhắc rằng hệ thống M3 Max cấu hình RAM tối thiểu có giá khoảng gấp đôi 4090

    • Khi nói bộ nhớ của Apple Silicon nhanh, đó là so với CPU tiêu dùng vốn đã mắc kẹt lâu ở bộ nhớ 2 kênh
      Thời 4 nhân thì còn ổn, nhưng với số lượng nhân hiện đại thì không hợp lý
      Khả năng mở rộng bộ nhớ của GPU tốt hơn nhiều, ngay cả ở phân khúc tiêu dùng
  • Chạy Whisper trên Mac M1 thì dễ, nhưng mặc định không dùng MLX
    Tôi đã mất một hai giờ để tìm xem phải cài và cấu hình gì để dùng MLX, rồi gặp các lỗi Python và Torch không rõ nguyên nhân
    Cuối cùng tôi bỏ cuộc và thuê một VM có GPU, rồi chạy được Whisper chỉ trong vài phút

  • Có thể sẽ có nhiều tranh luận về lựa chọn nào là tốt nhất tuyệt đối cho tác vụ X, nhưng tôi thích việc có được mức hiệu năng như vậy với mức tiêu thụ điện thấp đến thế

  • Thay vào đó, nếu dùng kho phái sinh Whisper này, trên hầu hết GPU thì âm thanh dài 1 giờ cũng được chuyển lời trong dưới 1 phút: https://github.com/Vaibhavs10/insanely-fast-whisper

    • Theo cảm nhận của tôi, ctranslate2 đôi khi còn nhanh hơn insanely-fast-whisper
      Ngay cả khi đặt batch size của ctranslate2 trên L4 thấp như 4, nó vẫn thắng tất cả benchmark bên kia, trừ A100 dùng flash attention 2
      Tiếc là batch mode cuối cùng lại không được đưa vào faster-whisper; có vẻ vì vậy mà mọi người không dễ thử ctranslate2
    • Tôi muốn biết chi tiết làm sao điều này có thể xảy ra, và liệu có khác biệt về chất lượng so với bản gốc không
      Với các kho như https://github.com/SYSTRAN/faster-whisper, có thể hiểu ngay vì sao chúng nhanh hơn bản triển khai gốc, còn những cái khác thì nhanh hơn nhờ hạ độ chính xác lượng tử hóa nhưng kết quả kém đi
      Nhưng với cái này thì lý do nhanh hơn đặc biệt không rõ ràng
      Càng đáng tò mò hơn khi xét việc nó nhanh hơn rất nhiều
  • Điều này đặc biệt thú vị nếu nghĩ đến Vision Pro của Apple
    Khả năng chạy mô hình tiết kiệm điện có thể không quan trọng với tất cả mọi người trên laptop, nhưng là lợi thế lớn đối với một headset vốn đã tiêu thụ nhiều điện

  • Muốn xin trợ giúp
    Có ứng dụng hoặc quy trình làm việc nguồn mở tốt nào cho chuyển lời và tách người nói không?
    Tôi đã xem https://github.com/thomasmol/cog-whisper-diarizationhttps://about.transcribee.net/, nhưng cả hai đều không hoạt động tốt, chẳng hạn bị crash

    • Tôi đã tự làm một giải pháp và nó khá đơn giản
      Chia MP3 thành các đoạn mà Whisper có thể xử lý, rồi gửi từng đoạn đến API để chuyển lời
      Đến giờ nó hoạt động như mong đợi, và chỉ cần vài dòng Python