Published on

เริ่มต้นใช้งาน LLM บนเครื่องตัวเอง ด้วย Ollama และ Open WebUI

Authors

เริ่มต้นใช้งาน 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
  • ป้ายกำกับ (tags)

    ป้ายกำกับ (tags) นอกจากใช้ระบุขนาดของโมเดลแล้ว เราจะเห็นว่ายังมีคำอื่นๆ ต่อท้ายด้วย เช่น base, code, instruct, และ text ซึ่งเอาไว้ระบุถึงลักษณะการฝึกและการใช้งานของโมเดล AI โดยโมเดลแต่ละแบบถูกฝึกเพื่อใช้งานกับงานเฉพาะทางหรือทั่วไป แตกต่างกันตามความต้องการของผู้ใช้งาน ดังนี้

    • Base
      • Base model คือโมเดลพื้นฐานที่ผ่านการฝึกด้วยข้อมูลที่หลากหลายแต่ยังไม่ได้รับการปรับแต่งเฉพาะทาง
      • โดยทั่วไปจะเป็นโมเดลที่ใช้การเรียนรู้จากข้อมูลภาษาแบบทั่วไป ทำให้สามารถเข้าใจและสร้างข้อความได้ แต่ยังไม่มีการฝึกพิเศษเพื่อรองรับงานเฉพาะทาง เช่น การเขียนโค้ด หรือการตอบคำถามที่ซับซ้อน
      • เหมาะสำหรับการนำไปฝึกต่อในงานเฉพาะด้าน หรือเป็นพื้นฐานสำหรับโมเดลที่มีการใช้งานหลายรูปแบบ
    • Code
      • Code model ถูกฝึกเพิ่มเติมด้วยข้อมูลที่เกี่ยวกับโค้ดโปรแกรมและภาษาโปรแกรม เช่น Python, JavaScript, Java เป็นต้น
      • ถูกออกแบบมาเพื่อช่วยในการเขียนโค้ด, การตอบคำถามด้านการเขียนโปรแกรม, การอธิบายโค้ด, การตรวจหาข้อผิดพลาด หรือการสร้างโค้ดอัตโนมัติ
      • เหมาะสำหรับนักพัฒนาและโปรแกรมเมอร์ที่ต้องการเครื่องมือช่วยในการพัฒนาโปรแกรมหรือการเขียนโค้ด
    • Instruct
      • Instruct model เป็นโมเดลที่ผ่านการฝึกพิเศษโดยเน้นที่การตอบคำถามและให้คำแนะนำในลักษณะที่สอดคล้องกับคำสั่งของผู้ใช้งาน
      • ฝึกให้สามารถตอบสนองและทำตามคำสั่งต่าง ๆ ได้อย่างถูกต้อง มีโครงสร้างของคำตอบที่ชัดเจน เข้าใจง่าย และตรงประเด็น
      • เหมาะสำหรับงานที่ต้องการให้โมเดลทำตามคำสั่งโดยตรง เช่น การตอบคำถาม, การให้คำแนะนำ หรือการทำงานที่เกี่ยวกับการสื่อสารกับผู้ใช้ในรูปแบบ Q&A
    • Text
      • Text model ถูกออกแบบให้เน้นในการสร้างข้อความที่สละสลวยและสร้างเนื้อหาที่มีความเข้าใจเชิงลึกในเนื้อหาทางภาษา
      • สามารถใช้สร้างบทความ, สรุปเนื้อหา, เขียนข้อความเชิงสร้างสรรค์ หรือทำงานเกี่ยวกับการสร้างข้อความในรูปแบบต่าง ๆ
      • เหมาะสำหรับงานที่เกี่ยวข้องกับการเขียนบทความ การทำคอนเทนต์ การเขียนเชิงสร้างสรรค์ หรือการแปลภาษา

ดังนั้นการเลือกโมเดลควรคำนึงถึงลักษณะของงานและวัตถุประสงค์ของการใช้งาน โมเดลที่เหมาะสมจะช่วยให้ได้ผลลัพธ์ที่ตรงตามความต้องการมากที่สุด

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 ไว้ใช้งานในเครื่องของเราเองแล้ว