การเปรียบเทียบประสิทธิภาพโมเดล LLM ในเครื่อง
ที่มา
ฉันสร้าง LLM Speed Benchmark (LLMSB) ขึ้นในช่วงที่ทำงานเป็นนักศึกษาฝึกงานด้านวิศวกรรมแบบพาร์ตไทม์ที่ Anarchy (YC W23) LLMSB เป็นเครื่องมือเปรียบเทียบประสิทธิภาพสำหรับประเมินประสิทธิภาพของโมเดล LLM โดยใช้ไลบรารี transformers ของ HuggingFace สำหรับโหลดและเรียกใช้โมเดล LLM และทำการวัดค่าเหล่านี้:
- เวลาทำงานทั้งหมด
- โทเค็นต่อวินาที
- ข้อมูลจำเพาะฮาร์ดแวร์ทั่วไป
- การใช้งาน cpu (ความถี่ปัจจุบันและเปอร์เซ็นต์การใช้งานของคอร์ในช่วงเวลาต่าง ๆ)
- การใช้งาน ram (การใช้งาน ram และ swap เมื่อเวลาผ่านไป)
- การใช้งาน gpu (โหลด การใช้หน่วยความจำ และอุณหภูมิเมื่อเวลาผ่านไป)
ที่นี่ คือตัวอย่างการทำงานของการเปรียบเทียบประสิทธิภาพสำหรับโมเดล codellama-13b-oasst-sft-v10 ที่ทำงานบน H100 ฉันเป็นเจ้าของ Nvidia RTX 2070 Ti ซึ่งมี VRAM ขนาด 8 GB น่าเสียดายที่สำหรับโมเดล LLM สมัยใหม่ส่วนใหญ่ VRAM ขนาด 8 GB ไม่เพียงพอสำหรับใช้งานโมเดล เนื่องจากเหตุนี้ ฉันจึงใช้ RunPod เพื่อ “เช่า” GPU และรันการเปรียบเทียบประสิทธิภาพของฉันกับโมเดลบางรายการ
นี่คือเรื่องราวเบื้องหลัง/เรื่องราวต้นกำเนิดของ LLMSB เนื่องจากโครงการนี้เป็นโอเพนซอร์ส คุณจึงสามารถดูโค้ดได้ที่นี่ ด้านล่างนี้ ฉันได้ใส่ README จากคลังไว้ หากคุณต้องการลองดู
เกี่ยวกับ
🚧 LLM Speed Benchmark (LLMSB) ขณะนี้อยู่ในระยะเบตา (v0) โปรดอย่าใช้สิ่งนี้ในสภาพแวดล้อมการใช้งานจริง หรือใช้งานโดยยอมรับความเสี่ยงด้วยตนเอง เรายังคงแก้ไขปัญหาจุกจิกบางอย่างและปรับปรุงฟังก์ชันการทำงานอยู่ หากคุณพบข้อบกพร่องหรือมีข้อเสนอแนะ โปรดรายงานไว้ในประเด็นปัญหา ความคิดเห็นของคุณมีคุณค่าอย่างยิ่ง!
LLM Speed Benchmark (LLMSB) เป็นเครื่องมือเปรียบเทียบประสิทธิภาพสำหรับประเมินประสิทธิภาพของโมเดล LLM บนแพลตฟอร์มฮาร์ดแวร์ที่แตกต่างกัน เป้าหมายสูงสุดของมันคือการรวบรวมชุดข้อมูลที่ครอบคลุม ซึ่งให้รายละเอียดประสิทธิภาพของโมเดล LLM บนระบบต่าง ๆ เพื่อให้ผู้ใช้สามารถเลือกโมเดล LLM ที่เหมาะสมสำหรับโครงการของตนได้อย่างมีประสิทธิภาพยิ่งขึ้น
ข้อจำกัด
LLMSB อยู่ในเวอร์ชัน v0 ดังนั้นจึงมีข้อจำกัดดังนี้:
- ออกแบบมาให้ทำงานบนระบบปฏิบัติการที่ใช้ debian เท่านั้น หรือกล่าวคือไม่ได้ออกแบบมาให้ทำงานบน Windows สาเหตุคือ LLMSB ใช้ neofetch และ nvidia-smi เพื่อรวบรวมเมตริกเบื้องหลัง และตรรกะของเส้นทางไฟล์อ้างอิงระบบปฏิบัติการแบบ unix
- เนื่องจากวิธีการบันทึกเมตริก ตัวรวบรวมเมตริกอาจใช้เวลาสูงสุด 1 วินาทีในการรวบรวมแต่ละครั้ง ซึ่งหมายความว่าอย่างเร็วที่สุด เราสามารถรวบรวมเมตริกฮาร์ดแวร์ได้ทุก 1 วินาที
- LLMSB ใช้ HuggingFace เท่านั้นในการโหลดและเรียกใช้โมเดล วิธีนี้ใช้งานได้ในขณะนี้ แต่เป้าหมายคือทำให้ LLMSB รองรับเฟรมเวิร์กหลายรูปแบบ ไม่ใช่เพียง HuggingFace
- ปัจจุบัน โมเดลทั้งหมดถูกเรียกใช้ผ่านตรรกะที่นำเสนอในฟังก์ชัน
run_llm()ซึ่งอยู่ในsrc/hf.pyโดยใช้ฟังก์ชันAutoTokenizer()และAutoModelForCausalLM()เพื่อโหลดและเรียกใช้โมเดล วิธีนี้ใช้งานได้ แต่จำกัดวิธีที่เราสามารถกำหนดค่า/เพิ่มประสิทธิภาพโมเดลเฉพาะได้ เมื่อทราบเช่นนี้ เป้าหมายคือการสร้างคลาสแยกสำหรับโมเดลยอดนิยมแต่ละรายการ และใช้คลาสเฉพาะของโมเดลจาก HuggingFace เช่น LlamaTokenizer และ LlamaForCausalLM แทน - LLMSB รวบรวมเฉพาะเมตริกทั่วไปในระดับสูงเท่านั้น ในอนาคต เราต้องการรวบรวมเมตริกระดับต่ำลง เราคิดว่าส่วนหนึ่งสามารถทำได้โดยใช้ ตัวห่อหุ้ม porfiler ของ Pytorch
ตัวอย่างผลลัพธ์
22 พฤศจิกายน 2023
LLMSB ถูกเรียกใช้/ทดสอบบน GPU L40 และ H100 ผ่าน RunPod ในการเปรียบเทียบประสิทธิภาพเหล่านั้น มีการทดสอบโมเดล llama-2-7b-hf, codellama-13b-oasst-sft-v10 และ mpt-7b ดูผลลัพธ์ที่นี่ หากสังเกตพบข้อผิดพลาด/ปัญหาใด ๆ โปรดรายงานไปยังประเด็นปัญหา
การตั้งค่า
-
สร้างและเปิดใช้งานสภาพแวดล้อม python:
python3 -m venv env source env/bin/activate -
ติดตั้งการอ้างอิงแพ็กเกจ (โดยใช้ APT):
apt -y update apt install -y vim apt install -y neofetch -
ติดตั้งการอ้างอิงของ python:
pip3 install transformers pip3 install psutil pip3 install gputil pip3 install tabulate pip3 install sentencepiece pip3 install protobuf -
ติดตั้ง Pytorch
# install pytorch stable build, for linux, using CUDA 12.1: pip3 install torch torchvision torchaudio -
ติดตั้ง LLM-VM:
pip install llm-vm -
(ไม่บังคับ) หากคุณกำลังใช้โมเดลอย่าง LLAMA คุณจะต้องมีโทเค็นการเข้าถึง HuggingFace ตั้งค่าโทเค็นการเข้าถึงของคุณที่นี่ จากนั้นบันทึกโทเค็นของคุณลงในคอนโซลโดยเรียกใช้คำสั่งต่อไปนี้:
huggingface-cli login
วิธีการเรียกใช้
-
ดำเนินการตามขั้นตอนที่ระบุไว้ในส่วน การตั้งค่า
-
ในการกำหนดค่าชุดของคุณ คุณต้องสร้างไฟล์ json ที่มีพารามิเตอร์ต่อไปนี้ (นี่คือตัวอย่าง):
- หมายเหตุ: ไม่ใช่ทุกเฟรมเวิร์กที่รองรับพารามิเตอร์เดียวกัน
{ "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 } -
ใช้เส้นทางไปยังไฟล์การกำหนดค่าที่คุณสร้างในขั้นตอนก่อนหน้า แล้วเรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มการเปรียบเทียบประสิทธิภาพ (เลือกหนึ่งตัวเลือก):
# 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 -
หลังจากการเปรียบเทียบประสิทธิภาพทำงานเสร็จแล้ว ให้ตรวจสอบผลลัพธ์สุดท้ายในไฟล์ที่ควรมีลักษณะคล้ายดังนี้:
report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
การตั้งค่า RunPod:
-
ตั้งค่า RunPod ตั้งค่าใบรับรอง/คีย์ ssh ของคุณ และเริ่มต้น pod ให้ทำงาน คุณสามารถเข้าถึง pod ของคุณได้ที่หน้าคอนโซลของ RunPod
-
คลิกปุ่ม “เชื่อมต่อ” เพื่อรับข้อมูลการเชื่อมต่อ ssh ข้อมูลนี้ควรมีลักษณะคล้ายดังนี้:
ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example-
คำสั่งนี้จะมีรูปแบบดังนี้:
ssh <user>@<ip-address> -p <port> -i <local-path-to-ssh-cert>
-
-
เมื่อใช้คำสั่งในขั้นตอนที่ 2 คุณควรจะสามารถ ssh เข้าไปยัง pod และใช้ GPU ที่คุณเลือกใน pod ของ RunPod นั้นได้
-
หากคุณต้องการคัดลอกไฟล์จาก pod ไปยังเครื่องของคุณ คุณจะเรียกใช้คำสั่งในรูปแบบนี้ (เป็นการอ้างอิงตัวแปรที่แสดงในขั้นตอนที่ 2):
scp -P <port> -i <local-path-to-ssh-cert> <user>@<ip-address>:<path-to-file-in-pod> <path-to-local-directory>-
นี่คือตัวอย่างของคำสั่งดังกล่าว:
scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
-
-
หลังจากใช้งาน pod เสร็จแล้ว ให้ปิดหรือหยุดชั่วคราว แต่โปรดระวัง หากคุณหยุดชั่วคราว คุณยังคงถูกเรียกเก็บค่าบริการ เพียงแต่ในจำนวนที่น้อยกว่ามาก
แหล่งข้อมูลที่ยอดเยี่ยม:
- ชุดข้อมูลพรอมต์: awesome-chatgpt-prompts, bigscience/P3 และ writing-prompts
- เรียนรู้เพิ่มเติมเกี่ยวกับพารามิเตอร์ LLM
- เครื่องมือเปรียบเทียบประสิทธิภาพที่ยอดเยี่ยมสำหรับเปรียบเทียบโมเดล LLM บนคลาวด์
- กระดานจัดอันดับความฉลาดของ LLM ที่น่าสนใจ: FastEval และ open_llm_leaderboard