บทนำ
หนึ่งในขั้นตอนประหยัดต้นทุนที่ใหญ่ที่สุดที่ทีมเวิร์กโฟลว์ AI สามารถทำได้กับโปรเจ็กต์ใหม่คือการใช้ประโยชน์จากการอนุมานแบบไร้เซิร์ฟเวอร์เมื่อเหมาะสม ตามเนื้อผ้า โมเดล AI จำเป็นต้องมี GPU เฉพาะเพื่อทำงานตลอด 24 ชั่วโมงทุกวัน โดยจ่ายเป็นรายชั่วโมง ด้วยจุดสิ้นสุดการอนุมานแบบไร้เซิร์ฟเวอร์ ทีมมีทางเลือกในการใช้โมเดลโอเพ่นซอร์สจำนวนมากแบบจ่ายต่อโทเค็น แทนที่จะจ่ายต่อชั่วโมง และจัดการการตั้งค่าและการบำรุงรักษาด้วยตนเอง ซึ่งช่วยลดต้นทุนในการเริ่มใช้ผลิตภัณฑ์ใหม่ เนื่องจากช่วยให้ทีมจ่ายเฉพาะการใช้งานและขนาดเท่าที่จำเป็นเท่านั้น
แม้ว่าสถาปัตยกรรมแบบไร้เซิร์ฟเวอร์จะมีมาระยะหนึ่งแล้ว แต่ทีมที่มีโมเดลแบบกำหนดเองหรือที่ได้รับการปรับแต่งยังคงจ่ายอัตรารายชั่วโมงสำหรับการใช้งาน GPU อย่างไรก็ตาม มีความเป็นไปได้ที่จะโฮสต์โมเดลที่ได้รับการปรับแต่งอย่างละเอียดและส่งมอบผ่านจุดสิ้นสุดแบบไร้เซิร์ฟเวอร์พร้อมการเรียกเก็บเงินแบบจ่ายต่อโทเค็น เราจะอธิบายวิธีที่เป็นไปได้ที่จะโฮสต์โมเดลที่ได้รับการปรับแต่งแบบไร้เซิร์ฟเวอร์ รวมถึงประโยชน์และผลเสียของการดำเนินการดังกล่าว
ประเด็นสำคัญ
- วิธีการปรับแต่งแบบละเอียดที่มีประสิทธิภาพด้วยพารามิเตอร์ เช่น LoRA ทำให้การโฮสต์โมเดลแบบกำหนดเองแบบไร้เซิร์ฟเวอร์ใช้งานได้จริงโดยการสร้างอะแดปเตอร์น้ำหนักขนาดเล็กที่สามารถวางทับโมเดลพื้นฐานแบบแช่แข็งที่ใช้ร่วมกันได้ ซึ่งหมายความว่าแพลตฟอร์มสามารถรองรับตัวแปรที่ได้รับการปรับแต่งอย่างดีหลายร้อยรายการจาก GPU ตัวเดียว ทำให้ไม่จำเป็นต้องปรับใช้ต่อรุ่นโดยเฉพาะ
- ทีมที่มีการรับส่งข้อมูลหนาแน่นหรือคาดเดาไม่ได้สามารถลดต้นทุนการอนุมานได้โดยการเปลี่ยนไปใช้อุปกรณ์ปลายทางที่ได้รับการปรับแต่งแบบไร้เซิร์ฟเวอร์ โดยจ่ายเฉพาะโทเค็นที่พวกเขาใช้ แทนที่จะใช้งาน GPU ตลอดเวลา การปรับใช้ยังเร็วขึ้นอีกด้วย เนื่องจากการอัปโหลดอะแดปเตอร์ที่ได้รับการฝึกอบรมไปยังแพลตฟอร์มที่ได้รับการจัดการจะสร้างจุดสิ้นสุด API แบบสดภายในไม่กี่นาทีโดยไม่ต้องตั้งค่าโครงสร้างพื้นฐาน
- ข้อดีข้อเสียหลักของการอนุมานแบบไร้เซิร์ฟเวอร์กับโมเดลที่ได้รับการปรับแต่งอย่างละเอียดคือการสตาร์ทแบบเย็น โดยที่อะแดปเตอร์ที่ไม่ได้ใช้งานต้องโหลดใหม่จากที่จัดเก็บข้อมูลก่อนจึงจะสามารถตอบสนองคำขอได้ โดยเพิ่มเวลาแฝงสูงสุดถึงสองสามร้อยมิลลิวินาที ซึ่งสามารถบรรเทาลงได้ด้วยการร้องขอ Keep-alive เป็นระยะ และความล่าช้านั้นน้อยกว่าการสตาร์ทขณะเย็นของรุ่นเต็ม เนื่องจากต้องดึงข้อมูลเฉพาะน้ำหนักของอะแดปเตอร์น้ำหนักเบาเท่านั้น
วิธีการปรับแต่งแบบละเอียดที่รองรับ
สิ่งสำคัญคือต้องชี้แจงในที่นี้ว่าเมื่อเราพูดว่า "การปรับแต่งอย่างละเอียด" ในบริบทนี้ เราไม่ได้หมายถึงการปรับแต่งแบบเต็มแบบดั้งเดิม โดยที่น้ำหนักของแบบจำลองทั้งหมดได้รับการฝึกใหม่ตั้งแต่ต้นด้วยข้อมูลใหม่ การปรับแต่งแบบละเอียดทั้งหมดมีราคาแพง ใช้เวลานาน และสร้างแบบจำลองใหม่ทั้งหมดที่มีขนาดใหญ่เท่ากับต้นฉบับ การโฮสต์โมเดลนั้นแบบไร้เซิร์ฟเวอร์นั้นทำไม่ได้เพราะไม่สามารถแชร์กับผู้ใช้หลาย ๆ คนได้ ต้องมีการใช้งาน GPU โดยเฉพาะของตัวเอง
การปรับแต่งอย่างละเอียดตามพารามิเตอร์ (PEFT) จะอัปเดตเฉพาะชุดย่อยเล็กๆ ของตุ้มน้ำหนัก แทนที่จะฝึกตุ้มน้ำหนักทั้งหมดใหม่ โดยปล่อยให้โมเดลดั้งเดิมหยุดนิ่ง ซึ่งจะสร้างชุดน้ำหนักเพิ่มเติมที่เล็กกว่ามากซึ่งแสดงถึงการปรับแต่ง ในขณะที่โมเดลฐานหนักยังคงไม่เปลี่ยนแปลงและสามารถแชร์กับผู้ใช้ต่างๆ จำนวนมากที่ไม่เกี่ยวข้องได้
วิธี PEFT ที่ใช้กันอย่างแพร่หลายที่สุดคือ Low-Rank Adaptation (LoRA) แทนที่จะแก้ไขน้ำหนักที่มีอยู่ของโมเดลโดยตรง LoRA จะเพิ่มเมทริกซ์อะแดปเตอร์ขนาดเล็กที่ฝึกได้ไว้ที่ด้านบนของโมเดลฐานแบบแช่แข็ง อะแดปเตอร์เหล่านี้บันทึกพฤติกรรมเฉพาะงานด้วยน้ำหนักเพียงไม่กี่เมกะไบต์ เมื่อเทียบกับรุ่นพื้นฐานที่มีขนาดหลายสิบหรือหลายร้อยกิกะไบต์ LoRA ยังมาในหลายรูปแบบ รวมถึง QLoRA, DoRA และ LoRA+ ซึ่งได้รับการสนับสนุนอย่างกว้างขวางจากแพลตฟอร์มการอนุมานแบบไร้เซิร์ฟเวอร์
เนื่องจากโมเดลพื้นฐานหยุดนิ่งและเหมือนกันกับผู้ใช้ทุกคน แพลตฟอร์มจึงสามารถโหลดโมเดลดังกล่าวลงในหน่วยความจำ GPU ได้เพียงครั้งเดียวและแชร์ได้ จากนั้นจะสามารถโหลดอะแดปเตอร์ LoRA ของผู้ใช้แต่ละคนไว้ด้านบนได้ตามเวลาที่ร้องขอ ทำให้สะดวกต่อการรองรับตัวแปรที่ได้รับการปรับแต่งหลายร้อยรายการจาก GPU ตัวเดียว สิ่งสำคัญที่ควรทราบคือแพลตฟอร์มที่รองรับการอนุมานแบบไร้เซิร์ฟเวอร์ในโมเดลที่ได้รับการปรับแต่ง โดยทั่วไปจะรองรับเฉพาะโมเดลพื้นฐานเฉพาะเท่านั้น ดังนั้นคุณจึงจำเป็นต้องมีอะแดปเตอร์ LoRA ที่ได้รับการฝึกอบรมเกี่ยวกับหนึ่งในรุ่นพื้นฐานที่รองรับ
การจัดการอะแดปเตอร์ LoRA หลายตัว
น้ำหนักของอะแดปเตอร์ LoRA (โดยทั่วไปจะอยู่ระหว่าง 10-100 MB ต่อตัว) จะถูกจัดเก็บไว้ในพื้นที่จัดเก็บอ็อบเจ็กต์ที่รวดเร็วหรือแคชในหน่วยความจำที่จัดการโดยเซิร์ฟเวอร์การอนุมาน เมื่อมีการร้องขอสำหรับอะแดปเตอร์เฉพาะ ระบบการให้บริการจะดึงน้ำหนักเหล่านั้นและหลอมรวมเข้ากับการส่งผ่านทันที
กระบวนการฟิวชั่นนี้มีน้ำหนักเบา ในแต่ละเลเยอร์ของหม้อแปลงที่ใช้ LoRA อะแดปเตอร์จะเพิ่มเมทริกซ์ขนาดเล็กสองตัวที่สร้างการแก้ไขระดับต่ำให้กับเอาต์พุตของเลเยอร์ ในระหว่างการอนุมาน เซิร์ฟเวอร์จะคำนวณเอาต์พุตของเลเยอร์ฐาน จากนั้นเพิ่มการแก้ไข LoRA ในการดำเนินการ CUDA เพิ่มเติมสองสามรายการ น้ำหนักพื้นฐานจะไม่ได้รับการแก้ไข ดังนั้นการสลับอะแดปเตอร์ระหว่างคำขอจะต้องเปลี่ยนคู่เมทริกซ์ขนาดเล็กเหล่านั้นในการลงทะเบียน GPU เท่านั้น แทนที่จะโหลดโมเดลพื้นฐานใหม่หรือรีสตาร์ทเคอร์เนล CUDA
หนึ่งในความท้าทายที่ใหญ่ที่สุดคือการจัดการหน่วยความจำด้วยอะแดปเตอร์หลายร้อยตัวที่ทำงานบนอินสแตนซ์เดียว เซิร์ฟเวอร์การอนุมานจำเป็นต้องรักษาแคชขนาดเล็กของน้ำหนักอแด็ปเตอร์ที่ใช้ล่าสุดและบ่อยที่สุดโดยตรงใน VRAM อะแดปเตอร์อื่นๆ จะถูกถอดออกจาก VRAM และจัดเก็บไว้ใน CPU RAM หรือที่เก็บข้อมูลอ็อบเจ็กต์ ส่งผลให้เวลาโหลดซ้ำลดลงสองสามร้อยมิลลิวินาที
กระบวนการจัดชุดอาจแตกต่างกันไปตามวิธี LoRA ที่ใช้ โดยทั่วไป คำขอที่ใช้อะแดปเตอร์ร่วมกันจะถูกจัดกลุ่มเป็นแบตช์ย่อยก่อนที่จะรันการแก้ไขสำหรับแต่ละกลุ่มย่อย แต่บางระบบ เช่น S-LoRA จะแพ็คคำขอจากอะแดปเตอร์ที่แตกต่างกันไปไว้ในฟอร์เวิร์ดพาสเดียวกัน และจัดเก็บอะแดปเตอร์ที่ใช้งานอยู่ในพูลหน่วยความจำแบบรวม จากนั้นจัดการด้วยเคอร์เนล CUDA แบบกำหนดเองที่สามารถใช้การแก้ไขอะแดปเตอร์ที่แตกต่างกันกับตำแหน่งลำดับที่แตกต่างกันพร้อมกัน วิธีการนี้บางครั้งเรียกว่า LoRA multiplexing ช่วยให้ GPU ยังคงอิ่มตัวอยู่แม้ว่าการรับส่งข้อมูลจะกระจายไปในตัวแปรที่ได้รับการปรับแต่งหลายแบบในคราวเดียว vLLM ยังรองรับ LoRA มัลติเพล็กซ์สำหรับผู้ใช้ที่สนใจเปลี่ยนอะแดปเตอร์ LoRA บน GPU ที่เช่ารายชั่วโมง
รายการ KV-cache เชื่อมโยงกับอะแด็ปเตอร์ที่สร้างรายการเหล่านั้น รายการแคชที่สร้างด้วยอะแดปเตอร์หนึ่งตัวไม่สามารถนำมาใช้ซ้ำสำหรับการร้องขอโดยใช้อะแดปเตอร์อื่นได้ ซึ่งท้ายที่สุดแล้วส่งผลให้อัตราการเข้าถึงแคช KV ต่ำกว่าในการตั้งค่าอะแดปเตอร์หลายตัวมากกว่าการใช้งานรุ่นเดียว และเซิร์ฟเวอร์อนุมานจะต้องคีย์รายการแคชด้วยทั้งโทเค็นพร้อมต์ของคำขอและตัวระบุอะแดปเตอร์
ผลลัพธ์ที่แท้จริงของการใช้การปรับแต่งแบบไร้เซิร์ฟเวอร์
จุดแข็งของการปรับแต่งแบบละเอียดแบบไร้เซิร์ฟเวอร์นั้นชัดเจนที่สุดสำหรับทีมที่กำลังสร้างบริการใหม่ๆ ที่มีการรับส่งข้อมูลที่ไม่สอดคล้องกัน โดยไม่จำเป็นหรือคุ้มต้นทุนที่จะมี GPU ที่สงวนไว้ซึ่งทำงานทุกวันตลอด 24 ชั่วโมง แทนที่จะจ่ายอัตราชั่วโมง GPU คงที่สำหรับชั่วโมงที่ไม่ได้ใช้งานข้ามคืน คุณจะจ่ายเฉพาะโทเค็นจากคำขอของคุณเท่านั้น เมื่อเปลี่ยนไปใช้สถาปัตยกรรมแบบไร้เซิร์ฟเวอร์ คุณสามารถลดต้นทุนการอนุมานตามลำดับความสำคัญได้
ความเร็วในการปรับใช้ก็เร็วกว่ามากเช่นกัน เมื่ออะแดปเตอร์ LoRA ของคุณได้รับการฝึกฝนแล้ว การอัปโหลดไปยังแพลตฟอร์มการอนุมานที่ได้รับการจัดการจะสร้างจุดสิ้นสุด API แบบสดภายในไม่กี่นาที โดยไม่ต้องมีการจัดเตรียมคลัสเตอร์ การประสานคอนเทนเนอร์ หรือการจัดการไดรเวอร์ GPU ซึ่งช่วยลดภาระด้านโครงสร้างพื้นฐาน ทำให้ทีมของคุณมีเวลามุ่งเน้นไปที่โมเดลและผลิตภัณฑ์ได้ คุณยังคงสามารถควบคุมพฤติกรรมของโมเดลได้ และคุณเป็นเจ้าของน้ำหนักของอะแดปเตอร์ แม้ว่าโมเดลพื้นฐานจะถูกแชร์และทำงานอย่างมีประสิทธิภาพและราคาไม่แพงก็ตาม
ข้อเสียที่ใหญ่ที่สุดของการโฮสต์โมเดลที่ได้รับการปรับแต่งแบบไร้เซิร์ฟเวอร์คือการเริ่มต้นแบบเย็น เมื่ออะแดปเตอร์ไม่ได้รับการรับส่งข้อมูลเป็นระยะเวลาหนึ่ง โดยทั่วไปแพลตฟอร์มการอนุมานจะปรับขนาดให้เป็นศูนย์ นำน้ำหนักออกจากหน่วยความจำ GPU และเรียกคืน VRAM สำหรับผู้ใช้รายอื่น ซึ่งหมายความว่าผู้ใช้คนถัดไปต้องรอในขณะที่ระบบดึงน้ำหนักจากที่เก็บข้อมูลอ็อบเจ็กต์ โหลด และเริ่มการส่งต่อ โดยปกติจะใช้เวลาประมาณสองสามร้อยมิลลิวินาที แทนที่จะเป็นไม่กี่วินาที เนื่องจากอะแดปเตอร์มีขนาดเล็ก โปรดทราบว่า หากโมเดลพื้นฐานไม่ได้ใช้บ่อยนักและตัวมันเองถูกขับออกไป ซึ่งเป็นไปได้ในสถาปัตยกรรมบางประเภท การสตาร์ทขณะเย็นอาจใช้เวลานานกว่านั้น Cold เริ่มต้นขัดขวาง Time-to-First-Token (TTFT) โดยเฉพาะโดยไม่ส่งผลกระทบต่อ Time-per-Output-Token ซึ่งเป็นอัตราที่โทเค็นจะถูกสร้างขึ้นหลังจากโทเค็นแรก TTFT เป็นตัวชี้วัดที่น่าจับตามองสำหรับทีมที่พยายามลดเวลาแฝงในการสตรีมให้เหลือน้อยที่สุด
การสตาร์ทขณะเครื่องเย็นสามารถบรรเทาลงได้สองวิธี ขั้นแรก คุณสามารถตั้งค่าสถาปัตยกรรมให้ส่งคำขอ Keep-Alive เป็นระยะในช่วงเวลาที่มีการรับส่งข้อมูลต่ำ ประการที่สอง คุณสามารถดำเนินการขั้นตอนต่างๆ ได้เมื่อฝึกอะแดปเตอร์ LoRA เพื่อให้การโหลดมีประสิทธิภาพมากขึ้น ในระหว่างการฝึก ขนาดและความหมายของอะแดปเตอร์จะถูกควบคุมโดยไฮเปอร์พารามิเตอร์ที่เรียกว่าอันดับหรือ 'r' อะแดปเตอร์อันดับ 8 จะสร้างพารามิเตอร์ที่สามารถฝึกได้ประมาณครึ่งหนึ่งของอะแดปเตอร์อันดับ 16 อะแดปเตอร์อันดับ 8 จะมี TTFT ที่เร็วขึ้นจากการสตาร์ทขณะเย็น หากอย่างอื่นเท่ากัน นอกจากนี้ LoRA เลเยอร์ของหม้อแปลงยังถูกนำไปใช้เพื่อเปลี่ยนขนาดไฟล์และค่าใช้จ่ายในการอนุมาน โดยทั่วไป LoRA จะใช้กับการสืบค้นและเมทริกซ์การฉายคุณค่าในแต่ละบล็อกความสนใจ แต่การนำไปใช้กับเลเยอร์ MLP (Multi-layer-perceptron) สามารถปรับปรุงคุณภาพได้เมื่อพยายามปรับโมเดลให้เข้ากับโดเมนเฉพาะ
บทสรุป
มีแนวโน้มว่าการอนุมานแบบละเอียดแบบไร้เซิร์ฟเวอร์จะเป็นข้อเสนอที่ได้รับความนิยมเพิ่มมากขึ้นในอนาคต ภูมิทัศน์ของ LLM ในปัจจุบันมุ่งเน้นไปที่การขยายขนาดโมเดลที่ใหญ่ขึ้น ให้เหตุผลดีขึ้น และมีขนาดใหญ่ขึ้น มีการให้ความสนใจน้อยลงกับสถาปัตยกรรมโดยมีโมเดลผู้เชี่ยวชาญจำนวนมากทำงานร่วมกัน ในที่สุด ชุมชนจะพบวิธีที่ดีกว่าในการจัดการโมเดลจำนวนมากและกรณีการใช้งานที่สถาปัตยกรรมประเภทนี้ทำงานได้ดี เมื่อเป็นเช่นนั้น มัลติเพล็กซ์ของ LoRA จะเป็นประโยชน์สำหรับทีมที่ต้องการจัดการตัวแทนแบบกำหนดเองจำนวนมากด้วยต้นทุนที่สมเหตุสมผล
ยังคงมองหาคำตอบอยู่ใช่ไหม
งานนี้ได้รับอนุญาตภายใต้ Creative Commons Attribution-NonCommercial- ShareAlike 4.0 International License