Đánh giá Tốc độ Mô hình LLM Cục bộ

Kho GitHub của Dự án

Bối cảnh

Tôi đã xây dựng LLM Speed Benchmark (LLMSB) trong thời gian làm Thực tập Kỹ thuật bán thời gian tại Anarchy (YC W23). LLMSB là một công cụ đánh giá hiệu năng để đo lường hiệu suất của một mô hình LLM. Nó sử dụng thư viện transformers của HuggingFace để tải và chạy mô hình LLM và nó đo lường:

  • tổng thời gian chạy
  • token mỗi giây
  • thông số phần cứng chung
  • sử dụng CPU (tần số hiện tại & phần trăm sử dụng các lõi theo thời gian)
  • sử dụng RAM (RAM & swap theo thời gian)
  • sử dụng GPU (tải, sử dụng bộ nhớ, & nhiệt độ theo thời gian)

ĐÂY là một ví dụ về một lần chạy benchmark cho mô hình codellama-13b-oasst-sft-v10 chạy trên một H100. Tôi cá nhân sở hữu một Nvidia RTX 2070 Ti, có 8 GB VRAM. Thật không may, đối với hầu hết các mô hình LLM hiện đại, 8 GB VRAM là không đủ để tương tác với một mô hình. Do đó, tôi đã sử dụng RunPod để “thuê” GPU(s) và chạy các benchmark trên một số mô hình nhất định.

Đây là câu chuyện nguồn gốc của LLMSB. Vì dự án là mã nguồn mở, bạn có thể xem mã nguồn ĐÂY. Dưới đây, tôi đã bao gồm README từ repo nếu bạn muốn kiểm tra.

Giới thiệu

🚧 LLM Speed Benchmark (LLMSB) hiện đang ở phiên bản beta (v0). Vui lòng không sử dụng công cụ này trong môi trường sản xuất, hoặc sử dụng nó theo rủi ro của bạn. Chúng tôi vẫn đang khắc phục một số vấn đề nhỏ và cải thiện chức năng. Nếu bạn gặp bất kỳ lỗi nào hoặc có đề xuất, vui lòng báo cáo chúng dưới mục BÁO LỖI. Phản hồi của bạn vô giá!

LLM Speed Benchmark (LLMSB) là một công cụ đánh giá hiệu năng để đo lường hiệu suất của các mô hình LLM trên nhiều nền tảng phần cứng khác nhau. Mục tiêu cuối cùng của nó là tổng hợp một bộ dữ liệu toàn diện chi tiết hiệu năng của các mô hình LLM trên nhiều hệ thống, giúp người dùng lựa chọn mô hình LLM phù hợp cho dự án của họ một cách hiệu quả hơn.

Hạn chế

LLMSB đang ở phiên bản v0, vì vậy nó có những hạn chế:

  • Chỉ được thiết kế để chạy trên các hệ điều hành dựa trên Debian, tức là nó không được thiết kế để chạy trên Windows. Điều này là vì LLMSB sử dụng neofetch và nvidia-smi để thu thập các chỉ số bên dưới và logic đường dẫn tệp được dựa trên hệ điều hành Unix.
  • Do cách các chỉ số được ghi lại, bộ thu thập chỉ số có thể mất tới 1 giây để thực hiện một lần thu thập. Điều này có nghĩa là, nhanh nhất, chúng ta có thể thu thập các chỉ số phần cứng mỗi 1 giây.
  • LLMSB chỉ sử dụng HuggingFace để tải và chạy các mô hình. Điều này hoạt động cho hiện tại, nhưng mục tiêu là để LLMSB hỗ trợ nhiều framework, không chỉ HuggingFace.
  • Hiện tại, tất cả các mô hình đều được chạy thông qua logic được trình bày trong hàm run_llm(), nằm trong src/hf.py, nơi các hàm AutoTokenizer() và AutoModelForCausalLM() được sử dụng để tải và chạy một mô hình. Cách này hoạt động nhưng nó giới hạn cách chúng ta có thể cấu hình/tối ưu hóa các mô hình cụ thể. Với nhận thức này, mục tiêu là tạo các lớp riêng biệt cho mỗi mô hình phổ biến và sử dụng các lớp chuyên dụng của HuggingFace cho từng mô hình, như LlamaTokenizer & LlamaForCausalLM.
  • LLMSB chỉ thu thập các chỉ số chung, mức cao. Trong tương lai, chúng tôi muốn thu thập các chỉ số mức thấp hơn. Chúng tôi nghĩ điều này có thể phần nào thực hiện được bằng cách sử dụng trình bọc profiler của Pytorch porfiler wrapper.

Kết quả mẫu

22 tháng 11, 2023

LLMSB đã được chạy/kiểm tra trên GPU L40 và H100 thông qua RunPod. Trong những benchmark đó, các mô hình llama-2-7b-hf, codellama-13b-oasst-sft-v10, & mpt-7b đã được thử nghiệm. Xem kết quả ĐÂY. Nếu phát hiện bất kỳ lỗi/vấn đề nào, vui lòng báo cáo chúng lên mục BÁO LỖI.

Cài đặt

  1. Tạo và kích hoạt môi trường python:

    python3 -m venv env
    source env/bin/activate
    
  2. Cài đặt phụ thuộc gói (sử dụng APT):

    apt -y update
    apt install -y vim
    apt install -y neofetch
    
  3. Cài đặt phụ thuộc python:

    pip3 install transformers
    pip3 install psutil
    pip3 install gputil
    pip3 install tabulate
    pip3 install sentencepiece
    pip3 install protobuf
    
  4. Cài đặt Pytorch

    # install pytorch stable build, for linux, using CUDA 12.1:
    pip3 install torch torchvision torchaudio
    
  5. Cài đặt LLM-VM:

    pip install llm-vm
    
  6. (tùy chọn) Nếu bạn đang sử dụng các mô hình như LLAMA, bạn sẽ cần một token truy cập HuggingFace. Thiết lập token truy cập của bạn ĐÂY sau đó lưu token vào console bằng cách chạy lệnh sau:

    huggingface-cli login
    

Cách Chạy

  1. Hoàn thành các bước được liệt kê trong phần Cài đặt.

  2. Để cấu hình bộ chạy, bạn cần tạo một tệp json với các tham số sau (dưới đây là một ví dụ):

    • LƯU Ý: không phải mọi framework đều hỗ trợ cùng các tham số
    {
      "model": "bigscience/bloom-560m",   # the model's path/repo on HuggingFace (https://huggingface.co/models)
      "prompt": "Hello World!",           # the prompt you want to input into the LLM model
      "device": "cuda:0",                 # the device you want to run the LLM model on (GPU/CPU)
      "max_length": 50,                   # the maximun length of the generated tokens
      "temperature": 0.9,                 # temperatue value for the LLM model
      "top_k": 50,                        # top-k value for the LLM model
      "top_p": 0.9,                       # top-p value for the LLM model
      "num_return_sequences": 1,          # the number of independently ran instances of the model
      "time_delay": 0,                    # the time delay (seconds) the metrics-collecter will wait per interation
      "model_start_pause": 1,             # the time (seconds) the test will wait BEFORE running the LLM model
      "model_end_pause": 1                # the time (seconds) the test will wait AFTER the LLM model is done running,
      "framework": "llm-vm"               # the name of the framework/library you want to use to run the model
    }
    
  3. Sử dụng đường dẫn tới tệp cấu hình bạn tạo ở bước trước, chạy lệnh sau để bắt đầu benchmark (chọn một tùy chọn):

    # run one benchmark
    python3 run.py --config ./configs/llmvm_test.json
    
    # run more then one benchmark (in this case 3)
    python3 run.py --config ./configs/llmvm_test.json --loops 3
    
  4. Sau khi benchmark hoàn tất, kiểm tra kết quả cuối cùng trong một tệp sẽ trông giống như sau:

    report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
    

Thiết lập RunPod:

  1. Thiết lập RunPod, thiết lập chứng chỉ/khóa ssh của bạn, và khởi chạy một pod. Bạn có thể truy cập pod(s) của mình trên Trang Bảng điều khiển RunPod.

  2. Nhấp vào nút “Connect” để nhận thông tin kết nối ssh. Thông tin này sẽ trông giống như sau:

    ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example
    
    • Lệnh này sẽ được định dạng như sau:

      ssh <user>@<ip-address> -p <port> -i <local-path-to-ssh-cert>
      
  3. Sử dụng lệnh ở bước #2, bạn sẽ có thể ssh vào pod và sử dụng GPU bạn đã chọn trong pod RunPod đó.

  4. Nếu bạn muốn sao chép một tệp từ pod về máy cục bộ của bạn, bạn sẽ chạy lệnh theo định dạng này (đang tham chiếu tới các biến được hiển thị ở bước #2):

    scp -P <port> -i <local-path-to-ssh-cert> <user>@<ip-address>:<path-to-file-in-pod> <path-to-local-directory>
    
    • Đây là một ví dụ về lệnh như vậy:

      scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
      
  5. Sau khi bạn hoàn tất với pod, tắt hoặc tạm dừng nó. Nhưng cảnh báo, nếu bạn tạm dừng nó bạn vẫn sẽ bị tính phí, chỉ là ít hơn nhiều.

Các nguồn tham khảo tuyệt vời: