- Published on
เริ่มต้นใช้งาน LLM บนเครื่องตัวเอง ด้วย Ollama และ Open WebUI
- Authors
- Name
- Somprasong Damyos
- @somprasongd
เริ่มต้นใช้งาน LLM บนเครื่องตัวเอง ด้วย Ollama และ Open WebUI
หลายๆ คน น่าจะได้ใช้ LLM กันมาบ้างแล้ว ไม่ว่าจะเป็น ChatGPT, Gemini หรือ Claude ซึ่งแต่ละตัวเราก็ต้องจ่ายค่าใช้บริการมากน้อยแตกต่างกันตามความสามารถ
ในบทความนี้จะแนะนำการติดตั้ง LLM เพื่อใช้งานในเครื่องของตัวเอง และที่สำคัญก็ไม่ต้องกังวลเรื่องข้อมูลภายในองค์กรของเรา ว่าจะถูกส่งออกไปข้างนอกด้วย
สิ่งที่ต้องเตรียม
- ติดตั้งโปรแกรม Docker
เริ่มต้นด้วย Ollama
Ollama เป็นเครื่องมือที่ใช้สำหรับรัน LLM แบบ open source ในเครื่องของเราเอง สามารถติดตั้งได้ทั้ง Linux, Windows, macOS และ Docker
ซึ่งตัวเจ้า ollama สามารถรันได้ทั้งบน CPU และ GPU ดังนั้นถ้าเครื่องใครที่ไม่มี GPU ก็สามารถใช้ CPU รันแทนได้ แต่จะช้าหน่อยเท่านั้นเอง
การติดตั้ง
การติดตั้งด้วย Docker
รันคำสั่ง
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
สำหรับการติดตั้งโปแกรมในแต่ละ OS สามารถดาวน์โหลดได้ที่นี่ ส่วนบทความนี้จะใช้ตัวอย่างการติดตั้งบน macOS ซึ่งมีขั้นตอนง่ายๆ ดังนี้
ดาวน์โหลดโปรแกรม ที่นี่ และลากไปใส่ใน
/Applications
เมื่อเปิดใช้งานครั้งแรกจะต้องติดตั้ง
ollama cli
ก่อน
การใช้งาน
เมื่อติดตั้ง ollama cli
สำเร็จ เราก็จะสามารถรัน LLM ได้แล้ว
รัน LLM โดยใช้คำสั่ง
ollama run model_name
(ถ้าเป็นการรัน model นั้นครั้งแรก ตัวโปรแกรมจะทำการดาวน์โหลด model มาให้โดยอัตโนมัติ)ollama run llama3.2 >>> Send a message (/? for help)
ทดสอบ โดยเราสามารถพิมพ์คำถามเข้าไปได้เลย
>>> Why sky is blue? The color of the sky is a complex phenomenon that depends on various factors. Here's a simplified explanation: When sunlight enters Earth's atmosphere, it encounters tiny molecules of gases such as nitrogen (N2) and oxygen (O2). These molecules scatter the light in all directions, but they scatter shorter (blue) wavelengths more than longer (red) wavelengths. This is known as Rayleigh scattering, named after the British physicist Lord Rayleigh, who first described the phenomenon in the late 19th century. The scattering of blue light leads to the sky appearing blue during the daytime, especially when the sun is overhead. There are a few reasons why the sky appears more blue: 1. **Angle of incidence**: When sunlight enters the Earth's atmosphere at an angle other than directly overhead, some of the shorter wavelengths (like blue and violet) are scattered in all directions, while longer wavelengths (like red and orange) continue to travel in a straight line. 2. **Atmospheric conditions**: The density and type of gases in the atmosphere also affect the color of the sky. For example, during sunrise and sunset, the atmosphere scatters more light in the shorter wavelengths due to the presence of more molecules at lower altitudes. 3. **Clouds and aerosols**: Clouds and aerosols can scatter light in different ways, adding to the overall brightness and color of the sky. It's worth noting that the sky doesn't always appear blue, and other factors like atmospheric conditions, lighting, and pollution can influence its appearance. However, the combination of Rayleigh scattering, atmospheric conditions, and cloud cover all contribute to the characteristic blue color of the sky during the daytime. >>> Send a message (/? for help)
นอกจาการใช้งานผ่าน cli แล้ว เรายังสามารถใช้งาน ollama ได้ผ่าน api ด้วย สามารถศึกษาการใช้งานได้ ที่นี่
การเลือกใช้งาน Model
จาก https://ollama.com/library จะเห็นว่า Ollama นั้น มี model ให้ใช้งานเยอะมาก ซึ่งก่อนเราจะเอา model มาใช้งาน เราต้องดูที่อะไรบ้าง
ขนาดของโมเดล
จากรูปจะเห็นว่ามีคำว่า 1B กับ 3B ซึ่งนั่นหมายถึงขนาดของโมเดล AI ซึ่งวัดโดยจำนวนพารามิเตอร์ (parameters) ที่โมเดลมีอยู่ โดย B หมายถึง "พันล้าน" (Billion) ดังนั้น
- 1B หมายถึงโมเดลที่มีพารามิเตอร์ประมาณ 1 พันล้านตัว
- 3B หมายถึงโมเดลที่มีพารามิเตอร์ประมาณ 3 พันล้านตัว
โดยทั่วไปแล้ว ขนาดของโมเดลที่ใหญ่ขึ้น (เช่น 8B) มักจะมีประสิทธิภาพในการประมวลผลและความสามารถในการทำความเข้าใจที่ดีกว่า เพราะมันมีพารามิเตอร์มากกว่า ซึ่งช่วยให้โมเดลสามารถจับรายละเอียดในข้อมูลได้ดีกว่า
ดังนั้นโมเดลขนาดใหญ่จึงมักจะเหมาะสมกับงานที่ต้องการความแม่นยำสูงหรือความสามารถในการประมวลผลข้อมูลที่ซับซ้อน เช่น การตอบคำถามเชิงลึก การแปลภาษา การสร้างข้อความ หรือการวิเคราะห์ข้อมูลขนาดใหญ่
อย่างไรก็ตาม โมเดลขนาดใหญ่ก็ต้องใช้ทรัพยากรในการประมวลผลสูงขึ้น เช่น การใช้ GPU หรือ RAM ที่มากกว่า นอกจากนี้ยังมีการหน่วงเวลา (latency) ที่มากกว่า ซึ่งอาจทำให้การตอบสนองช้าลงเมื่อใช้งานในระบบแบบเรียลไทม์
สำหรับงานทั่วไปที่ไม่ซับซ้อน หรือไม่ต้องการความแม่นยำสูง โมเดลขนาดเล็กเช่น 1B หรือ 3B อาจเพียงพอแล้ว
Quantization
Quantization เป็นเทคนิคที่ใช้ในการลดขนาดโมเดล AI โดยการลดความละเอียดของตัวเลขที่ใช้ในการเก็บพารามิเตอร์โมเดล ซึ่งทำให้ขนาดของโมเดลลดลงและทำให้ประมวลผลได้เร็วขึ้นและใช้ทรัพยากรน้อยลง นอกจากนี้ quantization ยังช่วยให้โมเดลทำงานบนอุปกรณ์ที่มีข้อจำกัดด้านหน่วยความจำหรือความสามารถในการประมวลผล เช่น โทรศัพท์มือถือหรืออุปกรณ์ IoT ได้อย่างมีประสิทธิภาพมากขึ้น
ตัวอย่างเช่น
- Q2 (2-bitQuantization):
- ใช้บิตเพียง 2 บิตต่อค่า (เช่น 00, 01, 10, 11) ซึ่งทำให้โมเดลขนาดเล็กลงอย่างมากและใช้หน่วยความจำน้อยมาก
- โมเดลที่ใช้ Q2 มีขนาดเล็กที่สุดแต่ก็อาจสูญเสียความแม่นยำมากที่สุดเช่นกัน
- เหมาะกับงานที่ต้องการความเร็วและใช้หน่วยความจำน้อยที่สุด แต่ยอมรับความแม่นยำที่ลดลง
- Q4 (4-bit Quantization):
- ใช้บิต 4 บิตต่อค่า (เช่น มี 16 ค่าที่เป็นไปได้) ซึ่งทำให้โมเดลมีขนาดเล็กลงมาก แต่ยังคงมีความละเอียดพอสมควรเมื่อเทียบกับ Q2
- เป็นจุดสมดุลระหว่างการลดขนาดโมเดลและความแม่นยำ ซึ่งดีกว่า Q2 แต่ยังเล็กกว่าขนาดเต็มของโมเดล
- เหมาะสำหรับงานที่ต้องการการประมวลผลที่เร็วขึ้นและยังคงมีความแม่นยำระดับปานกลาง
- Q8 (8-bitQuantization):
- ใช้บิต 8 บิตต่อค่า (มีค่าได้ 256 ระดับ) เป็นแบบที่ใกล้เคียงกับ float16 มากขึ้น (ที่ใช้บิต 16 บิต)
- ลดขนาดโมเดลได้พอสมควร แต่ยังคงความแม่นยำของโมเดลไว้ได้สูงเมื่อเทียบกับ Q2 และ Q4
- เหมาะสำหรับงานที่ต้องการความแม่นยำสูง โดยใช้หน่วยความจำและการประมวลผลน้อยกว่า float16 หรือ float32
- Q2 (2-bitQuantization):
ป้ายกำกับ (tags)
ป้ายกำกับ (tags) นอกจากใช้ระบุขนาดของโมเดลแล้ว เราจะเห็นว่ายังมีคำอื่นๆ ต่อท้ายด้วย เช่น
base
,code
,instruct
, และtext
ซึ่งเอาไว้ระบุถึงลักษณะการฝึกและการใช้งานของโมเดล AI โดยโมเดลแต่ละแบบถูกฝึกเพื่อใช้งานกับงานเฉพาะทางหรือทั่วไป แตกต่างกันตามความต้องการของผู้ใช้งาน ดังนี้- Base
- Base model คือโมเดลพื้นฐานที่ผ่านการฝึกด้วยข้อมูลที่หลากหลายแต่ยังไม่ได้รับการปรับแต่งเฉพาะทาง
- โดยทั่วไปจะเป็นโมเดลที่ใช้การเรียนรู้จากข้อมูลภาษาแบบทั่วไป ทำให้สามารถเข้าใจและสร้างข้อความได้ แต่ยังไม่มีการฝึกพิเศษเพื่อรองรับงานเฉพาะทาง เช่น การเขียนโค้ด หรือการตอบคำถามที่ซับซ้อน
- เหมาะสำหรับการนำไปฝึกต่อในงานเฉพาะด้าน หรือเป็นพื้นฐานสำหรับโมเดลที่มีการใช้งานหลายรูปแบบ
- Code
- Code model ถูกฝึกเพิ่มเติมด้วยข้อมูลที่เกี่ยวกับโค้ดโปรแกรมและภาษาโปรแกรม เช่น Python, JavaScript, Java เป็นต้น
- ถูกออกแบบมาเพื่อช่วยในการเขียนโค้ด, การตอบคำถามด้านการเขียนโปรแกรม, การอธิบายโค้ด, การตรวจหาข้อผิดพลาด หรือการสร้างโค้ดอัตโนมัติ
- เหมาะสำหรับนักพัฒนาและโปรแกรมเมอร์ที่ต้องการเครื่องมือช่วยในการพัฒนาโปรแกรมหรือการเขียนโค้ด
- Instruct
- Instruct model เป็นโมเดลที่ผ่านการฝึกพิเศษโดยเน้นที่การตอบคำถามและให้คำแนะนำในลักษณะที่สอดคล้องกับคำสั่งของผู้ใช้งาน
- ฝึกให้สามารถตอบสนองและทำตามคำสั่งต่าง ๆ ได้อย่างถูกต้อง มีโครงสร้างของคำตอบที่ชัดเจน เข้าใจง่าย และตรงประเด็น
- เหมาะสำหรับงานที่ต้องการให้โมเดลทำตามคำสั่งโดยตรง เช่น การตอบคำถาม, การให้คำแนะนำ หรือการทำงานที่เกี่ยวกับการสื่อสารกับผู้ใช้ในรูปแบบ Q&A
- Text
- Text model ถูกออกแบบให้เน้นในการสร้างข้อความที่สละสลวยและสร้างเนื้อหาที่มีความเข้าใจเชิงลึกในเนื้อหาทางภาษา
- สามารถใช้สร้างบทความ, สรุปเนื้อหา, เขียนข้อความเชิงสร้างสรรค์ หรือทำงานเกี่ยวกับการสร้างข้อความในรูปแบบต่าง ๆ
- เหมาะสำหรับงานที่เกี่ยวข้องกับการเขียนบทความ การทำคอนเทนต์ การเขียนเชิงสร้างสรรค์ หรือการแปลภาษา
- Base
ดังนั้นการเลือกโมเดลควรคำนึงถึงลักษณะของงานและวัตถุประสงค์ของการใช้งาน โมเดลที่เหมาะสมจะช่วยให้ได้ผลลัพธ์ที่ตรงตามความต้องการมากที่สุด
Open WebUI
การใช้งาน Ollama ข้างต้นนั้น จะเห็นว่าเป็นการใช้งาน ถามตอบ ทีละคำถาม หากต้องการใช้งานแบบระบบ chat เหมือน ChatGPT นั้น เราจะใช้ Open WebUI มาช่วยจัดการเรื่องนี้ให้
การติดตั้ง
การติดตั้ง Open WebUI สามารถติดตั้งได้ง่ายๆ ผ่าน Docker โดยใช้คำสั่ง นี้
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
การใช้งาน
เข้าใช้งานที่ http://localhost:3000
เมื่อเข้าใช้งานครั้งแรก ให้เลือก Sign up เพื่อสร้าง user เข้าใช้งาน
เสร็จแล้วก็จะพร้อมใช้งาน
สามารถเลือกโมเดลที่ต้องการใช้งานได้ (ถ้าใช้งานบ่อย ให้กด Set as Default เอาไว้)
ทดสอบใช้งาน
เพียงเท่านี้ เราก็จะมีระบบ chat เหมือน ChatGPT ไว้ใช้งานในเครื่องของเราเองแล้ว