ปรับขนาด LLM สู่ Production: คู่มือปฏิบัติ

การใช้ประโยชน์จาก APIs สำหรับการรวม LLM

การรวม Large Language Models (LLMs) เข้ากับ codebase สามารถทำได้หลายวิธี แต่การใช้ OpenAI-compatible API เป็นสิ่งที่แนะนำอย่างยิ่งสำหรับการปรับใช้ใน production deployments วิธีนี้ช่วยให้มีความยืดหยุ่นในการปรับตัวให้เข้ากับภูมิทัศน์ของโมเดลที่เปลี่ยนแปลงไปอย่างรวดเร็ว โมเดลที่เคยถือว่าล้ำสมัยเมื่อไม่กี่เดือนก่อนอาจล้าสมัยได้อย่างรวดเร็ว

นับตั้งแต่การบูมของ AI ที่เริ่มต้นด้วย ChatGPT ในปี 2022 อินเทอร์เฟซ API ของ OpenAI ได้กลายเป็นมาตรฐาน de facto สำหรับการเชื่อมต่อแอปพลิเคชันกับ LLMs มาตรฐานนี้ช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันโดยใช้ทรัพยากรที่มีอยู่ เช่น การเริ่มต้นด้วย Mistral 7B ใน Llama.cpp บนโน้ตบุ๊ก และเปลี่ยนไปใช้เซิร์ฟเวอร์ API ของ Mistral AI อย่างราบรื่นสำหรับการปรับใช้ใน production deployment ซึ่งช่วยลดการถูกล็อกอยู่กับโมเดลเดียว, inference engine หรือผู้ให้บริการ API

Cloud-based inference services มอบวิธีการที่เป็นมิตรกับ capital expenditure (capex) ในการปรับขนาด AI deployments บริการเหล่านี้ช่วยลดความจำเป็นในการจัดการฮาร์ดแวร์และการกำหนดค่าโมเดล แต่กลับให้บริการ API สำหรับการรวมแอปพลิเคชัน

นอกเหนือจากข้อเสนอ API จากผู้สร้างโมเดลรายใหญ่แล้ว ยังมี AI infrastructure startups จำนวนมากขึ้นที่นำเสนอ inference-as-a-service สำหรับ open-weight models ผู้ให้บริการเหล่านี้มีความแตกต่างกันในแนวทางของพวกเขา บางราย เช่น SambaNova, Cerebras และ Groq ใช้ประโยชน์จากฮาร์ดแวร์เฉพาะทางหรือเทคนิคต่างๆ เช่น speculative decoding เพื่อเร่ง inference แต่มีโมเดลให้เลือกน้อยกว่า รายอื่นๆ เช่น Fireworks AI สนับสนุนการปรับใช้ custom fine-tuned models โดยใช้ Low Rank Adaptation (LoRA) adapters ความหลากหลายของระบบนิเวศ AI จำเป็นต้องมีการวิจัยอย่างละเอียดก่อนที่จะตัดสินใจเลือกผู้ให้บริการรายใดรายหนึ่ง

ข้อควรพิจารณาในการปรับใช้ LLM แบบ On-Premise

ในสถานการณ์ที่วิธีการแบบคลาวด์ไม่สามารถทำได้เนื่องจากข้อจำกัดด้านความเป็นส่วนตัว, กฎระเบียบ หรือโครงสร้างพื้นฐานที่มีอยู่ก่อนแล้ว (เช่น บริษัทได้ลงทุนใน GPU servers ไปแล้ว) การปรับใช้แบบ on-premise จึงมีความจำเป็น นี่อาจก่อให้เกิดความท้าทายหลายประการ คำถามทั่วไปที่เกิดขึ้นมีดังนี้:

  • การเลือกโมเดล: โมเดลที่เหมาะสมขึ้นอยู่กับ use case เฉพาะ โมเดลที่ออกแบบมาสำหรับ customer service chatbot จะมีข้อกำหนดที่แตกต่างจากโมเดลที่ใช้สำหรับ retrieval-augmented generation หรือเป็น code assistant ขอแนะนำให้ใช้เวลากับผู้ให้บริการ API เพื่อระบุโมเดลที่ตรงกับความต้องการ
  • ข้อกำหนดด้านฮาร์ดแวร์: การกำหนดฮาร์ดแวร์ที่จำเป็นเป็นสิ่งสำคัญอย่างยิ่ง เนื่องจาก GPUs มีราคาแพงและอาจหาซื้อได้ยาก ตัวโมเดลเองสามารถให้ข้อมูลเชิงลึกเกี่ยวกับฮาร์ดแวร์ที่จำเป็นในการรันได้ โมเดลขนาดใหญ่ต้องการฮาร์ดแวร์มากกว่า สามารถคำนวณประมาณการคร่าวๆ ของหน่วยความจำ GPU ขั้นต่ำได้โดยการคูณจำนวนพารามิเตอร์ (ในหน่วยพันล้าน) ด้วย 2GB สำหรับโมเดลที่ train ที่ความแม่นยำ 16 บิต สำหรับโมเดล 8 บิต ต้องใช้ 1GB ต่อพันล้านพารามิเตอร์ เทคนิคการบีบอัดโมเดล เช่น quantization สามารถลดสิ่งนี้ลงเหลือ 512MB ต่อพันล้านพารามิเตอร์ นี่คือขีดจำกัดล่าง ต้องใช้หน่วยความจำเพิ่มเติมเพื่อให้บริการโมเดลแก่ผู้ใช้หลายรายพร้อมกันเนื่องจาก key-value cache ซึ่งทำหน้าที่เป็นหน่วยความจำระยะสั้นของโมเดล Nvidia’s support matrix ให้คำแนะนำเกี่ยวกับ GPUs ที่จำเป็นในการรันโมเดลต่างๆ
  • Redundancy: นอกเหนือจากการปรับขนาดฮาร์ดแวร์ให้เหมาะสมกับโมเดลแล้ว จะต้องพิจารณา redundancy ด้วย GPU node เดียวมีความเสี่ยงต่อการล้มเหลว ดังนั้นการปรับใช้สองระบบขึ้นไปสำหรับ failover และ load balancing จึงเป็นสิ่งสำคัญ
  • วิธีการปรับใช้: LLMs สามารถปรับใช้และให้บริการใน production โดยใช้วิธีการต่างๆ: bare metal ที่มี load balancers, virtual machines หรือ containers ใน Docker หรือ Kubernetes Kubernetes ช่วยลดความซับซ้อนของการปรับใช้ขนาดใหญ่โดยการทำให้การสร้าง container, networking และ load balancing เป็นไปโดยอัตโนมัติ

Kubernetes สำหรับการปรับใช้ LLM

Kubernetes ช่วยลดความซับซ้อนที่เกี่ยวข้องกับการปรับใช้ขนาดใหญ่อย่างมากโดยการทำให้การสร้าง container, networking และ load balancing เป็นไปโดยอัตโนมัติ องค์กรจำนวนมากได้นำ Kubernetes มาใช้และเข้าใจแล้ว Nvidia, Hugging Face และรายอื่นๆ สนับสนุน containerized environments ด้วย Nvidia Inference Microservices (NIMs) และ Hugging Face Generative AI Services (HUGS) ซึ่งกำหนดค่าไว้ล่วงหน้าสำหรับ common workloads และ deployments

Inference Engines

มี inference engines ต่างๆ ให้เลือกใช้สำหรับการรันโมเดล รวมถึง Ollama และ Llama.cpp ซึ่งเข้ากันได้กับฮาร์ดแวร์ที่หลากหลาย สำหรับการปรับขนาดโมเดล ไลบรารีต่างๆ เช่น vLLM, TensorRT LLM, SGLang และ PyTorch มักถูกนำมาใช้ คู่มือนี้เน้นไปที่การปรับใช้โมเดลโดยใช้ vLLM เนื่องจากรองรับโมเดลยอดนิยมที่หลากหลาย และนำเสนอการสนับสนุนและความเข้ากันได้ในวงกว้างทั่วทั้ง Nvidia, AMD และฮาร์ดแวร์อื่นๆ

การเตรียมสภาพแวดล้อม Kubernetes

การตั้งค่าสภาพแวดล้อม Kubernetes เพื่อทำงานกับ GPUs ต้องใช้ไดรเวอร์และ dependencies เพิ่มเติมเมื่อเทียบกับการตั้งค่า Kubernetes ทั่วไป กระบวนการตั้งค่าจะแตกต่างกันสำหรับฮาร์ดแวร์ AMD และ Nvidia

คู่มือนี้ใช้ K3S ในการกำหนดค่า single-node ขั้นตอนพื้นฐานจะคล้ายกับสภาพแวดล้อม multi-node แต่ dependencies จะต้องได้รับการตอบสนองบน GPU worker node แต่ละรายการ และการกำหนดค่า storage อาจต้องมีการปรับเปลี่ยน

เป้าหมายคือการให้รากฐานที่มั่นคงสำหรับการปรับใช้ inference workloads ในลักษณะที่เป็นมิตรต่อ production ข้อกำหนดเบื้องต้นต่อไปนี้เป็นสิ่งที่จำเป็น:

  • เซิร์ฟเวอร์หรือเวิร์กสเตชันที่มีบอร์ด AMD หรือ Nvidia GPU ที่รองรับอย่างน้อยหนึ่งบอร์ด
  • การติดตั้ง Ubuntu 24.04 LTS ใหม่

Nvidia Dependencies

การตั้งค่าสภาพแวดล้อม K3S ที่เร่งความเร็วด้วย Nvidia จำเป็นต้องติดตั้ง CUDA Drivers Fabric Manager และ Headless server drivers ติดตั้ง Nvidia’s server utilities สำหรับการดีบักปัญหาไดรเวอร์

เพื่อขยายความและเพิ่มความชัดเจนในแต่ละส่วน:

การใช้ประโยชน์จาก APIs สำหรับการรวม LLM (รายละเอียดเพิ่มเติม)

API กลายเป็นสิ่งจำเป็นอย่างยิ่งสำหรับการรวม LLM เข้ากับแอปพลิเคชัน production เนื่องจากมีความยืดหยุ่นและปรับตัวได้ตามสถานการณ์ที่เปลี่ยนแปลงไปอย่างรวดเร็วในโลกของ AI โมเดล AI นั้นมีการพัฒนาอย่างต่อเนื่อง ทำให้โมเดลที่เคยล้ำสมัยกลายเป็นล้าสมัยได้อย่างรวดเร็ว การใช้ API ช่วยให้คุณสลับไปมาระหว่างโมเดลและผู้ให้บริการต่างๆ ได้อย่างง่ายดาย โดยไม่ต้องปรับเปลี่ยน codebase หลักของคุณใหม่ทั้งหมด

OpenAI API ได้กลายเป็นมาตรฐานโดยพฤตินัยสำหรับการเชื่อมต่อแอปพลิเคชันกับ LLM ต่างๆ ซึ่งช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันได้โดยใช้ทรัพยากรที่มีอยู่ ตัวอย่างเช่น คุณสามารถเริ่มต้นด้วย Mistral 7B ใน Llama.cpp บนโน้ตบุ๊กของคุณ และเปลี่ยนไปใช้เซิร์ฟเวอร์ API ของ Mistral AI ได้อย่างราบรื่นเมื่อคุณพร้อมที่จะปรับใช้แอปพลิเคชันของคุณในสภาพแวดล้อม production

Cloud-based inference services เป็นตัวเลือกที่ยอดเยี่ยมสำหรับการปรับขนาด AI deployments ของคุณ เนื่องจากเป็นมิตรกับค่าใช้จ่ายด้านทุน (capex) บริการเหล่านี้ช่วยลดความจำเป็นในการจัดการฮาร์ดแวร์และการกำหนดค่าโมเดลด้วยตนเอง แต่จะให้บริการ API ที่คุณสามารถใช้เพื่อรวม LLM เข้ากับแอปพลิเคชันของคุณได้

นอกเหนือจาก API ที่นำเสนอโดยผู้สร้างโมเดลรายใหญ่แล้ว ยังมี AI infrastructure startups จำนวนมากขึ้นที่นำเสนอ inference-as-a-service สำหรับ open-weight models ผู้ให้บริการเหล่านี้มีความแตกต่างกันในแนวทางของพวกเขา บางรายใช้ประโยชน์จากฮาร์ดแวร์เฉพาะทางหรือเทคนิคต่างๆ เช่น speculative decoding เพื่อเร่ง inference ในขณะที่รายอื่นๆ สนับสนุนการปรับใช้ custom fine-tuned models โดยใช้ Low Rank Adaptation (LoRA) adapters ก่อนที่จะเลือกผู้ให้บริการรายใดรายหนึ่ง ควรทำการวิจัยอย่างละเอียด

ข้อควรพิจารณาในการปรับใช้ LLM แบบ On-Premise (รายละเอียดเพิ่มเติม)

ในบางสถานการณ์ การปรับใช้ LLM แบบ on-premise อาจเป็นทางเลือกเดียวที่เป็นไปได้ ซึ่งอาจเป็นเพราะข้อจำกัดด้านความเป็นส่วนตัว, กฎระเบียบ หรือโครงสร้างพื้นฐานที่มีอยู่ก่อนแล้ว ตัวอย่างเช่น บริษัทอาจได้ลงทุนใน GPU servers ไปแล้ว และไม่ต้องการย้าย workloads ของตนไปยังคลาวด์

การปรับใช้ LLM แบบ on-premise อาจเป็นเรื่องที่ท้าทาย แต่ก็สามารถทำได้หากคุณวางแผนอย่างรอบคอบ คำถามทั่วไปที่เกิดขึ้นเมื่อปรับใช้ LLM แบบ on-premise ได้แก่:

  • การเลือกโมเดล: โมเดลที่เหมาะสมขึ้นอยู่กับ use case เฉพาะของคุณ ตัวอย่างเช่น โมเดลที่ออกแบบมาสำหรับ customer service chatbot จะมีข้อกำหนดที่แตกต่างจากโมเดลที่ใช้สำหรับ retrieval-augmented generation หรือเป็น code assistant ขอแนะนำให้ใช้เวลากับผู้ให้บริการ API เพื่อระบุโมเดลที่ตรงกับความต้องการของคุณ
  • ข้อกำหนดด้านฮาร์ดแวร์: การกำหนดฮาร์ดแวร์ที่จำเป็นเป็นสิ่งสำคัญอย่างยิ่ง เนื่องจาก GPUs มีราคาแพงและอาจหาซื้อได้ยาก ตัวโมเดลเองสามารถให้ข้อมูลเชิงลึกเกี่ยวกับฮาร์ดแวร์ที่จำเป็นในการรันได้ โมเดลขนาดใหญ่ต้องการฮาร์ดแวร์มากกว่า สามารถคำนวณประมาณการคร่าวๆ ของหน่วยความจำ GPU ขั้นต่ำได้โดยการคูณจำนวนพารามิเตอร์ (ในหน่วยพันล้าน) ด้วย 2GB สำหรับโมเดลที่ train ที่ความแม่นยำ 16 บิต สำหรับโมเดล 8 บิต ต้องใช้ 1GB ต่อพันล้านพารามิเตอร์ เทคนิคการบีบอัดโมเดล เช่น quantization สามารถลดสิ่งนี้ลงเหลือ 512MB ต่อพันล้านพารามิเตอร์ นี่คือขีดจำกัดล่าง ต้องใช้หน่วยความจำเพิ่มเติมเพื่อให้บริการโมเดลแก่ผู้ใช้หลายรายพร้อมกันเนื่องจาก key-value cache ซึ่งทำหน้าที่เป็นหน่วยความจำระยะสั้นของโมเดล Nvidia’s support matrix ให้คำแนะนำเกี่ยวกับ GPUs ที่จำเป็นในการรันโมเดลต่างๆ
  • Redundancy: นอกเหนือจากการปรับขนาดฮาร์ดแวร์ให้เหมาะสมกับโมเดลแล้ว จะต้องพิจารณา redundancy ด้วย GPU node เดียวมีความเสี่ยงต่อการล้มเหลว ดังนั้นการปรับใช้สองระบบขึ้นไปสำหรับ failover และ load balancing จึงเป็นสิ่งสำคัญ
  • วิธีการปรับใช้: LLMs สามารถปรับใช้และให้บริการใน production โดยใช้วิธีการต่างๆ: bare metal ที่มี load balancers, virtual machines หรือ containers ใน Docker หรือ Kubernetes Kubernetes ช่วยลดความซับซ้อนของการปรับใช้ขนาดใหญ่โดยการทำให้การสร้าง container, networking และ load balancing เป็นไปโดยอัตโนมัติ

Kubernetes สำหรับการปรับใช้ LLM (รายละเอียดเพิ่มเติม)

Kubernetes เป็นแพลตฟอร์ม container orchestration ที่ช่วยให้คุณปรับใช้, จัดการ และปรับขนาดแอปพลิเคชันที่ containerized ได้อย่างง่ายดาย Kubernetes เป็นตัวเลือกที่ยอดเยี่ยมสำหรับการปรับใช้ LLM ใน production เนื่องจากช่วยให้คุณจัดการความซับซ้อนที่เกี่ยวข้องกับการปรับใช้ขนาดใหญ่ได้

Kubernetes ช่วยลดความซับซ้อนที่เกี่ยวข้องกับการปรับใช้ขนาดใหญ่อย่างมากโดยการทำให้การสร้าง container, networking และ load balancing เป็นไปโดยอัตโนมัติ องค์กรจำนวนมากได้นำ Kubernetes มาใช้และเข้าใจแล้ว Nvidia, Hugging Face และรายอื่นๆ สนับสนุน containerized environments ด้วย Nvidia Inference Microservices (NIMs) และ Hugging Face Generative AI Services (HUGS) ซึ่งกำหนดค่าไว้ล่วงหน้าสำหรับ common workloads และ deployments

Inference Engines (รายละเอียดเพิ่มเติม)

Inference engines คือซอฟต์แวร์ที่ใช้ในการรัน LLM Inference engines มีให้เลือกหลากหลาย รวมถึง Ollama และ Llama.cpp ซึ่งเข้ากันได้กับฮาร์ดแวร์ที่หลากหลาย สำหรับการปรับขนาดโมเดล ไลบรารีต่างๆ เช่น vLLM, TensorRT LLM, SGLang และ PyTorch มักถูกนำมาใช้

คู่มือนี้เน้นไปที่การปรับใช้โมเดลโดยใช้ vLLM เนื่องจากรองรับโมเดลยอดนิยมที่หลากหลาย และนำเสนอการสนับสนุนและความเข้ากันได้ในวงกว้างทั่วทั้ง Nvidia, AMD และฮาร์ดแวร์อื่นๆ vLLM เป็น inference engine ที่รวดเร็วและใช้งานง่าย ซึ่งทำให้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับการปรับใช้ LLM ใน production

การเตรียมสภาพแวดล้อม Kubernetes (รายละเอียดเพิ่มเติม)

การตั้งค่าสภาพแวดล้อม Kubernetes เพื่อทำงานกับ GPUs ต้องใช้ไดรเวอร์และ dependencies เพิ่มเติมเมื่อเทียบกับการตั้งค่า Kubernetes ทั่วไป กระบวนการตั้งค่าจะแตกต่างกันสำหรับฮาร์ดแวร์ AMD และ Nvidia

คู่มือนี้ใช้ K3S ในการกำหนดค่า single-node K3S เป็น lightweight Kubernetes distribution ที่ง่ายต่อการติดตั้งและใช้งาน ขั้นตอนพื้นฐานจะคล้ายกับสภาพแวดล้อม multi-node แต่ dependencies จะต้องได้รับการตอบสนองบน GPU worker node แต่ละรายการ และการกำหนดค่า storage อาจต้องมีการปรับเปลี่ยน

เป้าหมายคือการให้รากฐานที่มั่นคงสำหรับการปรับใช้ inference workloads ในลักษณะที่เป็นมิตรต่อ production ข้อกำหนดเบื้องต้นต่อไปนี้เป็นสิ่งที่จำเป็น:

  • เซิร์ฟเวอร์หรือเวิร์กสเตชันที่มีบอร์ด AMD หรือ Nvidia GPU ที่รองรับอย่างน้อยหนึ่งบอร์ด
  • การติดตั้ง Ubuntu 24.04 LTS ใหม่

Nvidia Dependencies (รายละเอียดเพิ่มเติม)

หากคุณใช้ฮาร์ดแวร์ Nvidia คุณจะต้องติดตั้ง CUDA Drivers Fabric Manager และ Headless server drivers CUDA Drivers เป็นชุดไดรเวอร์ที่ช่วยให้คุณใช้ GPUs ของ Nvidia สำหรับการคำนวณ Fabric Manager เป็นเครื่องมือที่ช่วยให้คุณจัดการ GPUs ของ Nvidia และ Headless server drivers เป็นชุดไดรเวอร์ที่ช่วยให้คุณใช้ GPUs ของ Nvidia โดยไม่มีจอภาพ

คุณควรติดตั้ง Nvidia’s server utilities สำหรับการดีบักปัญหาไดรเวอร์ Nvidia’s server utilities เป็นชุดเครื่องมือที่ช่วยให้คุณดีบักปัญหาเกี่ยวกับไดรเวอร์ Nvidia

หวังว่ารายละเอียดเพิ่มเติมเหล่านี้จะเป็นประโยชน์!