Benchmark Whisper: Nvidia RTX 4090 so với M1 Pro MLX
(owehrens.com)- 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 + MLX là
0: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 GPU và M3 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
Ý 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
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ã
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
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
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
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 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
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
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
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
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
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 đó
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
Không dùng MLX nhưng có dùng Metal
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
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
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-diarization và https://about.transcribee.net/, nhưng cả hai đều không hoạt động tốt, chẳng hạn bị crash
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