Tăng tốc LLaMA trên CPU
- Dự án llamafile của Mozilla đã viết 84 kernel nhân ma trận mới
- Khi dùng trọng số F16 và Q8_0 trên CPU, thời gian đánh giá prompt nhanh hơn từ 30% đến 500% so với llama.cpp
- Mức cải thiện rõ rệt nhất đạt được trên các máy tính ARMv8.2+ (ví dụ: RPI 5), Intel (ví dụ: Alderlake) và AVX512 (ví dụ: Zen 4)
- Với các ma trận vừa với bộ nhớ đệm L2, tốc độ nhanh gấp 2 lần MKL
- Mức tăng tốc hoạt động tốt nhất với các prompt có ít hơn 1.000 token
Bối cảnh
- llamafile là dự án LLM cục bộ được khởi động cùng Mozilla vào tháng 11 năm 2023
- Đóng gói llama.cpp thành một binary đa nền tảng chỉ gồm một tệp bằng Cosmopolitan Libc
- Chạy trên 6 hệ điều hành cho AMD64 và ARM64 với một vài chỉnh sửa nhỏ
- Tin rằng việc cải thiện công nghệ cốt lõi có thể mang lại trải nghiệm llama.cpp tốt nhất cho người dùng và giúp cả hai dự án tiếp cận đối tượng rộng hơn
- Mozilla đã cung cấp nguồn lực cho việc này
Cải thiện hiệu năng trên phần cứng doanh nghiệp
- Khi lần đầu quan tâm đến LLM, môi trường làm việc là một chiếc Hewlett Packard tiết kiệm chạy Alpine, với ổ đĩa quay, RAM chậm, bộ xử lý AVX2 và không có GPU
- Điều tôi thích ở llama.cpp là họ ưu tiên những người như tôi trước tiên
- Tôi bắt đầu tình nguyện toàn thời gian và hợp tác với những người như Slaren để đưa vào hỗ trợ
mmap(), giúp giảm một nửa mức dùng RAM đồng thời cho phép tải trọng số ngay lập tức
- Khi đó đây là một bước nhảy lớn cho LLM cục bộ, nhưng gần như không giúp cải thiện tốc độ đánh giá
- Phần lớn mã suy luận do chính Georgi Gerganov viết và nó quá xuất sắc, đến mức phải mất thêm 1 năm tôi mới có thể cải thiện được
- Giờ thì đã cải thiện xong, hãy xem nó nhanh hơn bao nhiêu trên chiếc Hewlett Packard cũ
Cải thiện hiệu năng trên phần cứng sở thích
- Bạn có thể chạy mô hình ngôn ngữ lớn mà không cần máy tính cỡ lớn
- Một trong những máy tính cá nhân tốt nhất có thể mua ngoài cửa hàng hiện nay là Raspberry Pi
- Nó mang lại hiệu năng tốt với giá rẻ và tiêu thụ điện rất thấp
- Raspberry Pi vừa ra mắt thế hệ thứ 5 cách đây vài ngày và nhanh vượt trội so với mẫu trước
- Họ cũng bổ sung hỗ trợ cho ISA ARMv8.2 dotprod và số học fp16, điều rất hữu ích cho LLM
- Chỉ riêng hai tính năng này đã giúp llama.cpp đạt mức tăng hiệu năng 10 lần cho trọng số f16 vào năm ngoái
- Tuần này, tôi còn đẩy thêm mức tăng gấp 2 lần nhờ dùng các kernel vốn ban đầu dành cho AVX512
- Tôi không nghĩ những kernel được thiết kế cho thiết bị trung tâm dữ liệu lại phù hợp với một chiếc Raspberry Pi nhỏ gọn như vậy, nhưng vì cả hai CPU đều có 32 thanh ghi vector nên thực tế lại rất khớp
Cải thiện hiệu năng trên phần cứng gaming
- Game thủ có kỳ vọng chất lượng cao nhất trong nhóm người tiêu dùng coi trọng giá trị, nên phần cứng làm cho game thủ thường khá xuất sắc
- Ngành machine learning đã phát triển thịnh vượng trong nhiều năm nhờ tận dụng phần cứng dành cho game thủ
- Nếu không có những đóng góp quan trọng từ game thủ, mùa đông AI hẳn đã kéo dài thêm 10 năm nữa
- Vài tháng trước, tôi nhờ một game thủ lắp cho mình một máy tính có thể thay thế chiếc Hewlett Packard cũ
- Tôi cho rằng Alderlake là một CPU tuyệt vời, nhưng có vẻ nó đang bị hiểu sai rộng rãi vì tôi có thể dễ dàng tăng hiệu năng float16 lên gấp 5 lần
- Không giống ARMv8.2, các kernel x86 dùng kiểu phép toán float32 ở bên trong nên có thể làm vậy mà không gây sai số làm tròn
- Điều đó có nghĩa là có thể tạo ra bộ lọc spam thông minh hơn
- Chạy script shell
spam.sh chỉ mất 420 mili giây, nhanh hơn Raspberry Pi 5 gấp 7 lần
- Với khối lượng công việc nhỏ, con chip này có thể hoàn tất trước cả khi CUDA kịp khởi động
- Người dùng Alderlake có thể kỳ vọng rằng llamafile sẽ đặc biệt chú ý để không chạy trên các efficiency core
- Đó là một trong những yếu tố giúp llamafile chạy nhanh hơn llama.cpp
- Điều đó cũng có nghĩa là dù chạy LLM 24/7 thì vẫn còn đủ tài nguyên cho các chương trình khác trên máy
- llama.cpp dispatch các thread theo kiểu lockstep, nên nếu 1 lõi làm việc lâu hơn các lõi khác thì toàn bộ n lõi còn lại sẽ phải busy loop cho đến khi hoàn tất
- Điểm nổi bật lớn nhất của bộ vi xử lý này là nó có thể build 2,6 triệu dòng mã của monorepo Cosmopolitan nhanh đến mức nào
- Chiếc Hewlett Packard luôn mất 64 giây, còn máy gaming này chỉ mất 20 giây
- Ban đầu nó mất 35 giây, nhưng sau khi áp dụng kim loại lỏng và AI overclocking thì nhanh hơn
- Một lý do khác khiến mã hệ thống chạy cực nhanh trên Alderlake là trong quá trình làm CPU này đã có một cuộc đấu dữ dội giữa hacker và nhà khoa học, và hacker đã thắng
- Tôi hy vọng tương lai sẽ có một điểm thỏa hiệp tốt hơn cho AVX512, nhưng nhìn chung tôi rất hài lòng với con chip này vì nó là bước tiến đáng kể so với thế hệ trước
Cải thiện hiệu năng trên phần cứng Apple
- Nếu nói về máy tính cá nhân đẳng cấp nhất thì chắc chắn là Mac Studio
- Ở đây việc giành lợi thế hiệu năng khó hơn với tôi, vì đây là nền tảng phần cứng mà các lập trình viên llama.cpp quan tâm nhất, và do chọn dùng trình biên dịch của Stallman nên tôi phải làm việc với bất lợi thay vì dùng công cụ độc quyền của Apple
- Không có gì ngạc nhiên khi vi xử lý M2 biến llamafile thành một đường ống nội dung tổng hợp
- Mánh khóe Apple dùng ở đây là tận dụng tích hợp dọc
- Nếu mua Mac Studio và nhìn vào bên trong, bạn sẽ thấy họ đặt RAM DIMM vào trong CPU
- Vì CPU không còn phải thực hiện những cuộc gọi đường dài như vậy nữa, các tác vụ nhạy độ trễ như sinh token sẽ nhanh hơn nhiều
- Tuy nhiên, xét về flop thuần túy (đo bằng prompt tok/sec), ISA ARM của M2 Ultra chỉ bộc lộ nhiều hơn 30% năng lực tính toán so với chiếc máy Intel rẻ hơn nhiều của tôi
- Muốn truy cập nhiều hơn thì phải đi qua các framework độc quyền như Metal hay Accelerate
- Nếu đã cài
xcode, llamafile mặc định sẽ biên dịch một mô-đun stub nhỏ giúp bạn đứng trước tất cả các thư viện mã đóng nằm giữa bạn và silicon
- Nếu đang cân nhắc mua Mac Studio, một điều quan trọng là cũng giống như Windows Executive, XNU làm rất tốt việc giữ desktop ổn định, và điều đó có nghĩa là nó bảo vệ hệ thống khỏi chính bạn
- Vì tất cả các tính năng an toàn đó, việc biên dịch monorepo Cosmo trên Mac Studio mất 45 giây, nhưng ngay cả khi tung ra một fork bomb thì Netflix có lẽ cũng không bỏ lỡ dù chỉ một khung hình
- Script
spam.sh cũng chạy trong 430ms, chậm hơn Intel
- Tuy vậy, điều đó không làm tôi lo vì tôi đã thấy Asahi Linux có thể khai thác hết tiềm năng của M2 như thế nào
Cải thiện hiệu năng trên phần cứng chuyên nghiệp
- llamafile rất quan tâm đến việc giúp đỡ những người thiếu GPU, nhưng cũng mang lại trải nghiệm hàng đầu cho nhóm 1% cao cấp nhất
- AMD Ryzen Threadripper PRO 7995WX được ra mắt vài tháng trước và hiện là CPU đắt nhất mà tiền có thể mua
- Nó có giá 10.000 USD nhưng mang lại 96 lõi AVX512 dựa trên kiến trúc Zen4
- Dù giá gấp đôi, ISA x86 của 7995WX cung cấp hiệu năng tính toán thô cao hơn 7 lần so với ISA ARM của M2 Ultra, trong khi tốc độ sinh token gần như tương đương
- Điều này nhiều khả năng nhờ vào bộ nhớ đệm L3 384MB
- Một lợi thế của AVX512 là mô hình Gemma của Google có thể giải các câu đố toán trên AVX512 nhưng không làm được trên AVX2, vì vector lớn hơn thường giúp giảm sai số làm tròn dễ hơn
- Lệnh
VDPBF16PS giúp thực hiện updot bf16, tương tự như VNNI và ARM dotprod
- Các mô hình như Mistral và TinyLLaMA phân phối trọng số bằng bfloat16 ở định dạng chuẩn, nên việc hỗ trợ bf16 gốc là rất tốt
- Nếu chuyển bf16 sang fp16 thì chỉ có 13% các con số có thể được biểu diễn chính xác
- Trên thực tế điều đó gần như không quan trọng, vì 99,71% các con số mà Mistral 7b dùng nằm trong chính 13% đó
- Tuy nhiên, llamafile cố gắng hết sức để mang lại đúng số bit đã được công bố
2 bình luận
Không thấy dữ liệu về các cấu hình tầm trung như Intel 14600 hay Ryzen 5600. Có vẻ họ muốn nhấn mạnh rằng nó chạy được cả trên Raspberry Pi, nhưng có lẽ vẫn khá khó để dùng thực tế. Dù vậy, tôi vẫn muốn xem việc yêu cầu phần cứng cần thiết để chạy LLM cục bộ đang ngày càng thấp xuống như một điều an ủi.
Ý kiến trên Hacker News
Ý kiến về triển khai Fortran
SGEMM:-funroll-all-loops).Ý kiến về việc thay thế cuBLAS:
Ý kiến về việc chạy LLM (Local Language Model):
Ý kiến về đo lường hiệu năng:
Cung cấp liên kết liên quan:
Ý kiến về tiêu đề:
Ý kiến về cải thiện hiệu năng so với MKL-DNN:
Ý kiến về việc chạy LLM:
Ý kiến về việc Pixar dùng CPU:
Ý kiến về AMD Zen4 và AVX512: