Use a Simple Web Wrapper to Share the Local DeepSeek-R1 Model Service to LAN Users

  liuyuancheng        2025-03-03 00:55:05       315        0          English  简体中文  繁体中文  ภาษาไทย  Tiếng Việt 

title15.png

ในบทความก่อนหน้า Deploying DeepSeek-R1 Locally with a Custom RAG Knowledge Data Base เราได้แนะนำขั้นตอนโดยละเอียดเกี่ยวกับการปรับใช้ DeepSeek-R1:7b ในเครื่องด้วยฐานข้อมูลความรู้ RAG ที่กำหนดเองบนเดสก์ท็อปที่มี RTX3060 เมื่อ LLM deepseek-r1:7b ทำงานบนคอมพิวเตอร์ที่ติดตั้ง GPU ในเครื่องแล้ว ความท้าทายใหม่ก็เกิดขึ้น: เราสามารถใช้บริการ LLM บนคอมพิวเตอร์ GPU เท่านั้น จะเกิดอะไรขึ้นถ้าเราต้องการใช้จากอุปกรณ์อื่น ๆ ใน LAN ของฉัน มีวิธีใดบ้างที่ฉันสามารถเข้าถึงได้จากอุปกรณ์มือถือหรือแชร์บริการนี้กับคอมพิวเตอร์เครื่องอื่นในเครือข่ายเดียวกัน โดยค่าเริ่มต้น Ollama จะเปิด API ให้กับ localhost เท่านั้น ซึ่งหมายความว่าอุปกรณ์ภายนอกใน LAN ของคุณไม่สามารถโต้ตอบกับโมเดลได้อย่างง่ายดาย การเปลี่ยนการกำหนดค่าเพื่อเปิดเผย API อย่างเต็มที่อาจแก้ปัญหาการเชื่อมต่อได้ แต่ยังเป็นการลบการป้องกันที่จำกัดการดำเนินการที่อาจมีความเสี่ยง เช่น การสร้างสายสนทนาที่สมบูรณ์ ผู้ใช้ต้องการอินเทอร์เฟซที่ควบคุมได้ซึ่งสามารถ:

  • จำกัดการเข้าถึงเฉพาะฟังก์ชันที่จำเป็น (เช่น การส่งคำถามและการรับคำตอบ)

  • จัดเตรียมอินเทอร์เฟซบนเว็บที่ใช้งานง่ายสำหรับอุปกรณ์มือถือ

  • เปิดใช้งานการเรียก API แบบเป็นโปรแกรมด้วยการควบคุมการเข้าถึง

  • ทำหน้าที่เป็นศูนย์กลางสำหรับการเชื่อมต่อกับเซิร์ฟเวอร์ GPU หลายเครื่องและ LLM เวอร์ชันต่างๆ ของ DeepSeek

# Created:     2025/02/28
# version:     v_0.0.1
# Copyright:   Copyright (c) 2025 LiuYuancheng
# License:     MIT License

บทนำ

บทความนี้ให้ภาพรวมของ Flask wrapper สำรวจสถานการณ์การใช้งานจริง และอธิบายวิธีการกำหนดค่า Ollama เพื่อเปิดเผยบริการสำหรับการเรียก LLM API เราจะสำรวจว่าเว็บ wrapper ที่ใช้ Python-Flask อย่างง่ายทำหน้าที่เป็น "สะพาน" ที่ควบคุมระหว่างบริการ LLM ในเครื่อง (deepseek-r1) และผู้ใช้ LAN ได้อย่างไร และตอบสนองความต้องการห้าประการด้านล่าง:

  • เชื่อมต่อเซิร์ฟเวอร์ GPU ในเครื่องหลายเครื่องที่รัน LLM เวอร์ชันต่างๆ ของ DeepSeek ภายใน subnet

  • จำกัดหรือกรองการเข้าถึง Ollama API สำหรับผู้ใช้ LAN

  • เปิดใช้งานการทดสอบจากระยะไกลและการเปรียบเทียบประสิทธิภาพของการตอบสนองของ LLM

  • ให้การเข้าถึงแบบควบคุมไปยังโมเดลเฉพาะทาง/ปรับแต่งอย่างละเอียดโดยไม่ต้องเปิดเผยข้อมูลรับรองของเซิร์ฟเวอร์

  • อำนวยความสะดวกในการออกแบบ prompt โดยการแก้ไขคำถามของผู้ใช้ก่อนส่งโมเดล

ด้วยการใช้เว็บ wrapper นี้ ผู้ใช้จะได้รับการเข้าถึงโมเดล DeepSeek-R1 ที่ปลอดภัยและควบคุมได้ผ่านอินเทอร์เฟซที่ใช้งานง่าย เหมาะสำหรับการโต้ตอบทั้งบนเว็บและแบบเป็นโปรแกรม


บทนำเกี่ยวกับ DeepSeek Flask Web Wrapper

แอปพลิเคชันนี้มีอินเทอร์เฟซที่ใช้งานง่ายสำหรับการเข้าถึงโมเดล LLM หลายรายการจากระยะไกลที่รันบน GPU ต่างๆ (โดยใช้ Ollama เป็นโฮสต์โมเดล) แชทบอทได้รับการออกแบบมาเพื่อวัตถุประสงค์ดังต่อไปนี้:

  • ทดสอบฟังก์ชันการทำงานของอินสแตนซ์ Ollama LLM ที่โฮสต์บน GPU

  • อนุญาตให้เข้าถึง LLM เฉพาะทาง (ฝัง fine-tuned หรือ RAG) ร่วมกันโดยไม่ต้องมีการเข้าถึง SSH โดยตรง

  • เปรียบเทียบประสิทธิภาพของโมเดล LLM ที่แตกต่างกัน เช่น DeepSeek R1-1.5B และ DeepSeek R1-7B ในการตอบสนองต่อคำถามเดียวกัน

ขั้นตอนการทำงานนั้นง่ายมาก:

User → Web Wrapper (Port 5000) → Ollama API (Port 11434, localhost-only/remote) → Response  

UI เว็บแชทบอทแสดงอยู่ด้านล่าง:

s_035.png

Figure-02: Flask Deepseek service wrapper web chat bot UI , version v_0.0.1 (2025)

ผู้ใช้สามารถโต้ตอบกับแชทบอทผ่าน UI บนเว็บซึ่งมีเมนูแบบเลื่อนลงสำหรับการเลือกโมเดลในแถบนำทาง มุมมองอุปกรณ์มือถือ (โทรศัพท์) แสดงอยู่ด้านล่าง:

s_048.png

Figure-03: Flask Deepseek service wrapper web chat bot UI on Iphone , version v_0.0.1 (2025)

การเรียกฟังก์ชัน API โปรแกรมระยะไกล (Http GET ) แสดงอยู่ด้านล่าง:

resp = requests.get("http://127.0.0.1:5000/getResp", json={'model':'localhost-DS1.5b', 'message':"who are you"})
print(resp.content)

 

Program source repo: https://github.com/LiuYuancheng/Deepseek_Local_LATA/tree/main/Testing/1_Simple_Flask_Deepseek_ChatBot


เปิดเผย Ollama Service API ใน LAN

เมื่อใช้เว็บ wrapper คุณสามารถเปิดเผยบริการ Ollama ของคุณให้กับผู้ใช้ LAN ได้อย่างปลอดภัย แทนที่จะแก้ไขการกำหนดค่าของ Ollama โดยตรง ซึ่งจะเปิดเผยฟังก์ชัน API ทั้งหมด wrapper จะทำหน้าที่เป็นตัวกลาง

ตัวอย่างเช่น คำขอ API ทั่วไปผ่าน wrapper อาจมีลักษณะดังนี้:

curl http://localhost:11434/api/generate -d '{ "model": "deepseek-r1:1.5b", "prompt": "Why is the sky blue?"}'

การเข้าถึงที่ควบคุมนี้ทำให้มั่นใจได้ว่าในขณะที่ผู้ใช้สามารถส่งคำถามและรับคำตอบได้ แต่เราไม่มีความสามารถในการแก้ไขสถานะระบบภายในหรือเข้าถึงบันทึกและรายละเอียดการแก้ไขข้อบกพร่อง และหากคุณใช้อุปกรณ์มือถือเช่นโทรศัพท์หรือ Ipad ซึ่งไม่ง่ายต่อการสร้างบรรทัดคำสั่ง การใช้เซิร์ฟเวอร์ Ollama จะไม่สะดวก

ในการกำหนดค่าเซิร์ฟเวอร์ Ollama สำหรับ OS ที่แตกต่างกัน

การตั้งค่าตัวแปรสภาพแวดล้อมบน Mac

หาก Ollama ทำงานเป็นแอปพลิเคชัน macOS ควรตั้งค่าตัวแปรสภาพแวดล้อมโดยใช้ launchctl:

  1. สำหรับตัวแปรสภาพแวดล้อมแต่ละตัว ให้เรียก launchctl setenv

launchctl setenv OLLAMA_HOST "0.0.0.0:11434"
  1. รีสตาร์ทแอปพลิเคชัน Ollama

การตั้งค่าตัวแปรสภาพแวดล้อมบน Linux

หาก Ollama ทำงานเป็นบริการ systemd ควรตั้งค่าตัวแปรสภาพแวดล้อมโดยใช้ systemctl:

  1. แก้ไขบริการ systemd โดยเรียก systemctl edit ollama.service ซึ่งจะเปิดโปรแกรมแก้ไข

  2. สำหรับตัวแปรสภาพแวดล้อมแต่ละตัว ให้เพิ่มบรรทัด Environment ภายใต้ส่วน [Service]:

    [Service]
    Environment="OLLAMA_HOST=0.0.0.0:11434"
  3. บันทึกและออก

  4. โหลด systemd ใหม่และรีสตาร์ท Ollama:

    systemctl daemon-reload
    systemctl restart ollama

การตั้งค่าตัวแปรสภาพแวดล้อมบน Windows

บน Windows, Ollama จะสืบทอดตัวแปรสภาพแวดล้อมของผู้ใช้และระบบของคุณ

  1. ออกจาก Ollama ก่อนโดยคลิกที่ Ollama ในแถบงาน

  2. เริ่มแอปพลิเคชัน Settings (Windows 11) หรือ Control Panel (Windows 10) และค้นหา environment variables

  3. คลิกที่ Edit environment variables for your account

  4. แก้ไขหรือสร้างตัวแปรใหม่สำหรับบัญชีผู้ใช้ของคุณสำหรับ OLLAMA_HOST ตั้งค่าเป็น 0.0.0.0

  5. คลิก OK/Apply เพื่อบันทึก

  6. เริ่มแอปพลิเคชัน Ollama จากเมนู Start ของ Windows

Reference : https://github.com/ollama/ollama/blob/main/docs/faq.md#how-do-i-configure-ollama-server


สถานการณ์การใช้งาน

wrapper สามารถนำไปใช้ในสถานการณ์การใช้งาน 4 สถานการณ์ด้านล่างเพื่อแก้ปัญหาของผู้ใช้:

สถานการณ์การใช้งาน 01: การแชร์ที่ปลอดภัยบนเซิร์ฟเวอร์ GPU แบบ Headless

ปัญหา: ลองนึกภาพว่าคุณมีเซิร์ฟเวอร์ GPU ที่รัน DeepSeek บนระบบ Ubuntu ที่ไม่มีสภาพแวดล้อมเดสก์ท็อป คุณต้องการแชร์บริการ LLM กับผู้อื่นใน subnet เดียวกันโดยไม่ต้องเปิดเผยข้อมูลรับรอง SSH หรือฟังก์ชัน Ollama API ทั้งหมด

คุณต้องการจำกัดการเข้าถึง เช่น อนุญาตเฉพาะการตอบสนองโดยไม่แสดงบันทึก "การคิด" ของ deepseek และคุณยังต้องการเพิ่มตัวกรองที่กำหนดเองสำหรับคำขอของผู้ใช้และการตอบสนองของ LLM

โซลูชัน wrapper และแผนภาพขั้นตอนการทำงานแสดงอยู่ด้านล่าง:

s_058.png

Flask web wrapper ช่วยให้คุณ:

  • เปิดเผยเฉพาะ endpoints API ที่จำเป็น (เช่น การส่งคำถามและการรับคำตอบ) บนพอร์ต 5000

  • ป้องกันการเข้าถึงโดยตรงไปยังส่วนที่ละเอียดอ่อนของ Ollama API

  • จัดเตรียมอินเทอร์เฟซเว็บที่สะอาดซึ่งสามารถเข้าถึงได้จากอุปกรณ์ใดก็ได้บนเครือข่าย รวมถึงอุปกรณ์มือถือ

  • จัดเตรียม http API ที่จำกัดสำหรับโปรแกรมอื่นที่ทำงานบนคอมพิวเตอร์ใน LAN เดียวกัน

สถานการณ์การใช้งาน 02: การจัดการ Query ที่กำหนดเองตามความเชี่ยวชาญของผู้ใช้

ปัญหา: ผู้ใช้ที่แตกต่างกันมีความเชี่ยวชาญในระดับที่แตกต่างกัน ตัวอย่างเช่น ผู้เริ่มต้นอาจต้องการคำอธิบายที่ง่ายขึ้นของอัลกอริทึม เช่น bubble sort ในขณะที่ผู้เชี่ยวชาญอาจต้องการตัวอย่างทางเทคนิคโดยละเอียด

s_069.png

wrapper สามารถสกัดกั้น queries ของผู้ใช้และผนวก prompts เฉพาะบริบทก่อนที่จะส่ง query ไปยัง LLM ตัวอย่างเช่น:

  • Beginner Query: ระบบแก้ไข "What is bubble sort?" เป็น "I am new beginner to sorting algorithms. What is bubble sort?"

  • Advanced Query: ระบบแปลงคำถามเป็น "I am an expert and need a Python example. What is bubble sort?"

การออกแบบ prompt แบบไดนามิกนี้ปรับการตอบสนองให้ตรงกับความต้องการของผู้ใช้

สถานการณ์การใช้งาน 03: การเปรียบเทียบเซิร์ฟเวอร์ Multi-GPU และ Model

ปัญหา: ในสภาพแวดล้อมที่มีเซิร์ฟเวอร์ GPU หลายเครื่องที่รันโมเดล LLM ต่างๆ ของ DeepSeek (เช่น DeepSeek R1-1.5B, DeepSeek R1-7B และ DeepSeek Coder V2) การเปรียบเทียบประสิทธิภาพและการตอบสนองของโมเดลเหล่านี้อาจเป็นเรื่องท้าทายเมื่อจัดการแยกกัน

โซลูชัน wrapper และแผนภาพขั้นตอนการทำงานแสดงอยู่ด้านล่าง:

s_079.png

เว็บ wrapper ทำหน้าที่เป็นศูนย์กลางที่:

  • เชื่อมต่อกับเซิร์ฟเวอร์ GPU ในเครื่องหลายเครื่อง

  • จัดเตรียมเมนูแบบเลื่อนลงเพื่อเลือกโมเดลที่แตกต่างกัน

  • อนุญาตให้ผู้ใช้ส่ง query เดียวกันไปยังโมเดลหลายรายการเพื่อการเปรียบเทียบประสิทธิภาพและการตอบสนองที่ง่ายดาย

  • นำเสนออินเทอร์เฟซที่ควบคุมและสอดคล้องกันโดยไม่คำนึงถึงเซิร์ฟเวอร์พื้นฐาน

สถานการณ์การใช้งาน 04: การปรับสมดุลโหลด GPUs และการตรวจสอบ Requests

ปัญหา :

ในคลัสเตอร์ multi-GPU การจัดการ requests จากผู้ใช้หรือที่อยู่ IP ของโหนดที่แตกต่างกันอย่างมีประสิทธิภาพอาจเป็นเรื่องท้าทาย หากไม่มีการกระจาย request ที่เหมาะสม GPU บางตัวอาจโอเวอร์โหลดในขณะที่ GPU อื่นๆ ยังคงไม่ได้ใช้งาน นอกจากนี้ การบันทึกข้อมูล request เพื่อวัตถุประสงค์ในการตรวจสอบและเพิ่มประสิทธิภาพเป็นสิ่งสำคัญ

โซลูชัน wrapper :

เว็บ wrapper ทำหน้าที่เป็นเลเยอร์การจัดการ request โดยใช้ระบบคิวเพื่อบันทึก queries ของผู้ใช้และกระจายอย่างมีประสิทธิภาพไปยังเซิร์ฟเวอร์ GPU ที่พร้อมใช้งาน ด้วยการปรับสมดุล workloads แบบไดนามิก จะป้องกันการโอเวอร์โหลด GPU ตัวเดียวในขณะที่มั่นใจได้ถึงการใช้ทรัพยากรที่เหมาะสมที่สุด บันทึก request ยังสามารถจัดเก็บเพื่อการวิเคราะห์ ทำให้ผู้ดูแลระบบสามารถติดตามรูปแบบการใช้งานและปรับปรุงประสิทธิภาพของระบบ


การปรับใช้โปรแกรมและการใช้งาน

ในการติดตั้ง Ollama และตั้งค่าโมเดล deep seek ในคอมพิวเตอร์ในเครื่อง โปรดทำตาม "Step 1 : Deploy DeepSeek-R1 Model on Your Local Machine" ในคู่มือนี้: https://github.com/LiuYuancheng/Deepseek_Local_LATA/blob/main/Articles/1_LocalDeepSeekWithRAG/readme.md

ในการปรับใช้โปรแกรม โปรดทำตาม setup section ในไฟล์ read me ของ wrapper: https://github.com/LiuYuancheng/Deepseek_Local_LATA/blob/main/Testing/1_Simple_Flask_Deepseek_ChatBot/readme.md

จากนั้นแก้ไข app.py เพื่อเพิ่มรายละเอียดเซิร์ฟเวอร์ GPU (บริการ Ollama) ด้วย ID ที่ไม่ซ้ำกันในโปรแกรม wrapper:

OllamaHosts[] = {'ip': , 'model': }

 

s_088.png

เรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มแชทบอท:

python app.py

เข้าถึงเว็บ UI ที่ http://127.0.0.1:5000/ หรือ http://:5000/ และเลือกโมเดลที่ต้องการจากเมนูแบบเลื่อนลง

s_095.png

API Request : สำหรับการใช้งานโปรแกรม ให้ใช้ python request lib เพื่อส่ง http GET request เพื่อรับการตอบสนอง:

requests.get("http://127.0.0.1:5000/getResp", json={'model':'localhost-DS1.5b', 'message':"who are you"})

อีกทางเลือกหนึ่ง โปรดดู requestTest.py สำหรับตัวอย่างการใช้งาน API เพิ่มเติม


สรุป

Flask wrapper อย่างง่ายจะปลดล็อกกรณีการใช้งานที่มีประสิทธิภาพสำหรับการปรับใช้ LLM ในเครื่อง:

  1. Security: จำกัดการเปิดเผย endpoints ของ Ollama

  2. Accessibility: จัดเตรียมอินเทอร์เฟซที่เป็นมิตรกับมือถือ

  3. Flexibility: เปิดใช้งานการออกแบบ prompt การทดสอบ multi-model และการปรับสมดุลโหลด

Flask web wrapper อย่างง่ายเป็นโซลูชันที่มีประสิทธิภาพสำหรับการแชร์บริการโมเดล DeepSeek-R1 กับผู้ใช้ LAN อย่างปลอดภัยและมีประสิทธิภาพ ด้วยการเชื่อมช่องว่างระหว่าง Ollama API ในเครื่องและอุปกรณ์ภายนอก wrapper ทำให้มั่นใจได้ว่าบริการยังคงสามารถเข้าถึงได้แต่ยังคงมีการควบคุม ไม่ว่าคุณจะต้องการนำเสนออินเทอร์เฟซมือถือที่คล่องตัว ปกป้อง endpoints API ที่ละเอียดอ่อน หรือเปรียบเทียบโมเดล LLM หลายรายการ แนวทางนี้จะแก้ไขความท้าทายทั่วไปและปรับปรุงความสามารถในการใช้งานของการปรับใช้ DeepSeek ในเครื่อง


อ้างอิง


last edit by LiuYuancheng (liu_yuan_cheng@hotmail.com) by 08/02/2025 if you have any problem, please send me a message.

 

       

  RELATED


  0 COMMENT


No comment for this article.



  RANDOM FUN

When debugging on production environment