14 điểm bởi GN⁺ 2024-04-02 | 2 bình luận | Chia sẻ qua WhatsApp

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

 
savvykang 2024-04-02

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.

 
GN⁺ 2024-04-02
Ý kiến trên Hacker News
  • Ý kiến về triển khai Fortran SGEMM:

    • Các trình biên dịch Fortran hiện đại có thể áp dụng tối ưu hóa AVX và FMA mà không cần thay đổi bổ sung.
    • Tối ưu hóa unroll vòng lặp (loop unrolling) có thể thực hiện thông qua cờ trình biên dịch (-funroll-all-loops).
    • Trình biên dịch Intel thực hiện unroll vòng lặp ngay cả khi không có yêu cầu tường minh từ người dùng.
    • Việc thêm song song hóa vào mã nguồn Fortran 77 có thể khó, nhưng có thể thêm cú pháp OpenMP hoặc sử dụng các cấu trúc song song hóa của Fortran hiện đại.
    • Đừng đánh giá thấp các hàm Fortran 77. Mục tiêu của Fortran là giải phóng lập trình viên khỏi các chi tiết phụ thuộc nền tảng và giao công việc đó cho trình biên dịch.
  • Ý kiến về việc thay thế cuBLAS:

    • Có vẻ đây là nỗ lực viết lại cuBLAS bên trong CUDA.
    • Bước tiếp theo có thể là loại bỏ sự phụ thuộc vào CUDA và dùng trực tiếp compute shader của Vulkan hoặc Metal.
  • Ý kiến về việc chạy LLM (Local Language Model):

    • Mọi người nên có thể tải xuống và chạy LLM cục bộ ngay cả với yêu cầu tối thiểu.
    • Điều này có thể đóng vai trò như một bản sao lưu cho phần lớn tri thức của nhân loại.
  • Ý kiến về đo lường hiệu năng:

    • Có xu hướng thích dùng C++ để định nghĩa subroutine. C++ nhanh hơn Python hơn ba bậc độ lớn.
    • Thích ý tưởng đo chênh lệch hiệu năng theo "số năm của định luật Moore".
  • Cung cấp liên kết liên quan:

  • Ý kiến về tiêu đề:

    • Tiêu đề gây nhầm lẫn. Ban đầu có thể hiểu nhầm rằng bài viết đang khẳng định mô hình chạy trên CPU nhanh hơn GPU.
    • Một tiêu đề rõ ràng hơn như "Cải thiện hiệu năng của LLaMA trên CPU" sẽ tốt hơn.
  • Ý kiến về cải thiện hiệu năng so với MKL-DNN:

    • Có kinh nghiệm từng cố vượt qua MKL-DNN với các kích thước ma trận hạn chế nhưng đã thất bại.
    • Mức hiệu quả năng lượng như vậy trên CPU là điều không thể về mặt vật lý.
  • Ý kiến về việc chạy LLM:

    • Có thể chạy mô hình ngôn ngữ lớn mà không cần máy tính lớn.
    • Việc chạy mô hình với số lượng tham số nhỏ cũng về mặt kỹ thuật được tính là chạy mô hình ngôn ngữ, nhưng có thể không đáp ứng tiêu chuẩn mà đa số mọi người cho là hữu ích.
  • Ý kiến về việc Pixar dùng CPU:

    • Các studio lớn như Pixar sử dụng CPU để render phim vì chi phí/hiệu năng và khả năng truy cập RAM lớn hơn.
    • Cung cấp liên kết tin liên quan.
  • Ý kiến về AMD Zen4 và AVX512:

    • ISA x86 của 7995WX có giá gấp đôi ISA ARM của M2 Ultra, nhưng cung cấp sức mạnh tính toán thô nhiều hơn 7 lần, trong khi tốc độ sinh token gần như tương đương.
    • Điều này có thể là nhờ bộ nhớ đệm L3 384MB.
    • Đã thực hiện công việc giúp chạy LLaMA trên Zen4 nhanh hơn 2,8 lần so với trước đây.