เรื่องของเรื่องลองพวก LLM อยู่พวกเลยเอา ubuntu container ทำงานทุกอย่างเลย แต่ทว่าลืมไป แล้วถ้าจะลองใช้จากข้างนอกต้องทำยังไง ? เพราะตอนสร้าง Container ไม่ได้กำหนด Port ไว้
วิธีการที่เป็นไปได้ ?
- Cloudflare tunnel / ngrok
- Container Network เพิ่ม พวก Reverse Proxy เข้าไปครับ
- Container ลอง Commit State ล่าสุดของมัน แล้ว Run ใหม่อีกตัว แต่ตัวที่ผมเล่นอยู มันสูบ Disk เหลือเกินครับ
สำหรับ Blog นี้จะเน้นไปท่า Container Network เพิ่ม พวก Reverse Proxy เข้าไปครับ โดยภาพที่ผมทำจะตามรูปเลยครับ โดยภาพรวมจะเป็นแบบนี้
หลังจากเห็นภาพรวมแล้วมาลองกันครับ
- สร้าง docker network ก่อน
docker network create llm_network
- จากนั้น เอา network ต่อเข้าไปใน container ที่ run อยู่
docker network connect llm_network ubuntu2204-llm
- run ตัว Reverse Proxy อันนี้ผมใช้ตัว nginx โดยอยู่ใน network เดียวกัน และกำหนดให้ port ให้เรียบร้อย
docker run -d --name nginx --network llm_network -p 9000:9000 nginx
- จากนั้นมากำหนด Config เอาง่ายๆของผม ถ้ามายิงเข้า nginx ที่ port 9000 ให้ส่ง request ต่อไปให้อีก container ที่ port 10080 ครับ
server { listen 9000; location / { proxy_pass http://ubuntu2204-llm:10080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
- และ Copy Config ใส่เข้าไปครับ
docker cp ./my_conf.conf nginx:/etc/nginx/conf.d/my_conf.conf
- restart nginx
docker restart nginx
- ตรวจสอบว่าอยู่วงเดียวกันแล้ว
docker network inspect llm_network
- Test ลองยิงเข้า nginx
adminping@adminpinglegion:/mnt/c/Users/Chatr$ curl -X GET http://localhost:9000/v1/models -H 'accept: application/json' | jq '.' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 108 100 108 0 0 25168 0 --:--:-- --:--:-- --:--:-- 27000 { "object": "list", "data": [ { "id": "default", "created": 1720222826, "object": "model", "owned_by": "Not specified" } ] }
- ลองอื่นๆบ้าง
curl -X POST http://localhost:9000/v1/chat/completions -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"messages":[{"role":"system", " content": "You are a high school science teacher. Explain concepts in very simple English."}, {"role":"user", "content": "What is Mercury?"}]}' | jq '.'
ถ้าลองยิงจากข้างนอกแล้วติดปัญหา ลอง docker exec เข้าไปใน nginx แล้วลอง curl ครับ
PS C:\Users\Chatr> docker exec -it ubuntu2204-llm /bin/bash root@04164155bc14:/# curl -X GET http://localhost:8080/v1/models \ -H 'accept: application/json' {"object":"list","data":[{"id":"default","created":1720221065,"object":"model","owned_by":"Not specified"}]}root@04164155bc14:/# root@04164155bc14:/#
สำหรับ Blog นี้ของผมจะเป็นการแชร์วิธีการนึง พอดีตอนนั้นอยากลอง LLM ให้มันจบๆ แล้วลบทิ้ง + ตอนนั้นไม่มีพื้นที่ในคอมด้วยครับ แต่ถ้าจะให้ดี docker cp ย้าย Data ออกมา แล้วสร้าง Container ใหม่ก็เป็นอีกทางเลือกนึงครับผม จริงๆตอนออกแบบควรกำหนด Port / Mount อะไรให้เรียบร้อยด้วยครับ
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.