হ্যালো, Ollama: লোকাল ইনফারেন্স আপনার আর্কিটেকচারের বিমা
এটি ইংরেজি মূল লেখাটির মেশিন অনুবাদ। কিছু সূক্ষ্মতা হারিয়ে যেতে পারে, তাই ইংরেজি সংস্করণই মূল রেফারেন্স। মূল ইংরেজি লেখাটি পড়ুন
সংক্ষেপে
গভীর রাতের একটি বিল্ড সেশনে যখন আমার ইন্টারনেট চলে গেল আর তবুও আমার Raspberry Pi-তে একটি লোকাল Llama 3 ইনস্ট্যান্স প্রশ্নের উত্তর দিচ্ছিল, তখন বুঝলাম আমরা একটি মোড় ঘোরার বিন্দুতে পৌঁছেছি। মৌলিক রিজনিংয়ের কাজে আমরা আর বিলিয়ন ডলারের ডেটা সেন্টারের সঙ্গে স্থায়ী সংযোগের ওপর নির্ভরশীল নই। Gekro Lab-এ Ollama হলো সেই আর্কিটেকচারের বিমা পলিসি, যা কোনো প্রোভাইডারের বিভ্রাটের সময় আমার এজেন্টদের কাজ চালু রাখে।
আমি মহৎ কারণে এখানে শুরু করিনি। এর কারণ কৌতূহল আর খরচ। আমি চেয়েছিলাম জিনিসগুলো অবিরাম চলুক যাতে আমি শিখতে থাকি, আর আমি যেসব মডেল চেয়েছিলাম সেগুলোর নাগাল এমন খরচের আড়ালে ছিল যার প্রতিশ্রুতি আমি দিতে চাইনি। একটি Pi যা বিদ্যুতের দামে নিঃশব্দে চলতে থাকে, দুটো সমস্যারই সমাধান করে। ধীর, হ্যাঁ। তবু চালু।
আর্কিটেকচার
আমার সেটআপ একক মেশিন নয়; এটি একটি বিতরণকৃত ইনফারেন্স চেইন। উচ্চ-জটিলতার ক্লাউড রিজনিংয়ের জন্য আমি Together AI-কে অগ্রাধিকার দিই, কিন্তু ল্যাবের “স্নায়ুতন্ত্র” ভর করে আছে Ollama চালানো তিন-নোডের Raspberry Pi 5 ক্লাস্টারের (প্রতিটি 16GB) ওপর।
| মডেল | আকার | কোয়ান্ট স্তর | RAM ব্যবহার | টোকেন/সেকেন্ড (Pi 5 16GB) | সেরা ব্যবহার |
|---|---|---|---|---|---|
| Llama-3-8B | 4.7GB | Q4_K_M | ~5.2GB | 4-6 t/s | সাধারণ রিজনিং |
| Phi-3-Mini | 2.3GB | Q4_0 | ~2.8GB | 12-15 t/s | দ্রুত শ্রেণিবিন্যাস |
| Mistral-7B | 4.1GB | Q4_0 | ~4.5GB | 3-4 t/s | টুল ব্যবহার / ফাংশন কলিং |
হার্ডওয়্যারের চেয়ে ক্রম বেশি গুরুত্বপূর্ণ। OpenRouter-এর বিনামূল্যের মডেল আগে আসে, Pi থাকে মাঝখানে, আর পেইড OpenRouter শেষ অবলম্বন। ওই মাঝের জায়গাটা সাজসজ্জার জন্য নয়। বিনামূল্যের স্তর যখন পাওয়া যায় না, যা নজরে পড়ার মতো প্রায়ই ঘটে, তখন উত্তর দেয় Pi। যেদিনগুলোতে বিকল্প ছিল টাকা দেওয়া, সেদিনগুলোতে এটি সত্যিই আমাকে কাজ চালিয়ে যেতে দিয়েছে।
সেখানে পৌঁছাতে কয়েক দফা পরীক্ষা-নিরীক্ষা আর ভুল-শুদ্ধ লেগেছে। আমি ঠিকমতো খাপ খায় এমন মডেল খুঁজতে বারবার মডেল বদলেছি, আর প্রতিবারের শিক্ষা এক: বড় মডেল যখন খুব ধীর ছিল, তখন সমাধান ছিল কম প্যারামিটার আর আরও ভারী কোয়ান্টাইজেশন, বেশি ধৈর্য নয়।
ARM64 আর্কিটেকচারে মেমরি ব্যান্ডউইডথ হলো বাধা। প্রতি নোডে 16GB থাকায় অনলাইনে যে সাধারণ 8GB Pi বিল্ড দেখা যায় তার চেয়ে বড় মডেল চালানোর জায়গা আমার আছে। আমি দেখেছি 4-বিট কোয়ান্টাইজেশন (Q4) হলো সেরা বিন্দু: এর নিচে গেলে মডেল তার “কমন সেন্স” হারায়, এর ওপরে গেলে উল্লেখযোগ্য মানের লাভ ছাড়াই সিস্টেমের ওভারহেডে ভাগ বসান।
নির্মাণ
Linux-এ (WSL2 ও Raspberry Pi OS সহ) Ollama সেট করা এক লাইনের কাজ, কিন্তু আসল ইঞ্জিনিয়ারিং হয় আপনি কীভাবে সেটাকে মুড়ে দেন তাতে।
1. হেডলেস ইনস্টল
আমি আমার Pi ক্লাস্টার হেডলেস চালাই। কোনো GUI নেই, শুধু SSH আর একটি systemd সার্ভিস।
# Install Ollama on Linux/Pi
curl -fsSL https://ollama.com/install.sh | sh
# Serve Ollama on all network interfaces (required for cluster access)
sudo systemctl edit ollama.service
আপনার প্রধান ওয়ার্কস্টেশন থেকে বাইরের কল অনুমোদন করতে সার্ভিস ফাইলে এই এনভায়রনমেন্ট ভ্যারিয়েবলটি যোগ করুন:
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
2. অ্যাবস্ট্র্যাকশনের বয়লারপ্লেট
আপনার পরীক্ষা-নিরীক্ষায় সরাসরি কাঁচা Ollama API ব্যবহার করবেন না। ফলব্যাক-সচেতন ক্লায়েন্ট ব্যবহার করুন। পুরো ল্যাব জুড়ে আমি যে লজিক ব্যবহার করি, এটা তার সরলীকৃত সংস্করণ।
import ollama
import logging
class LocalBrain:
def __init__(self, model="llama3:8b"):
self.model = model
self.logger = logging.getLogger("GekroLocal")
def inference(self, prompt: str) -> str:
try:
self.logger.info(f"Running local inference on {self.model}...")
response = ollama.chat(model=self.model, messages=[
{'role': 'user', 'content': prompt},
])
return response['message']['content']
except Exception as e:
self.logger.error(f"Local inference failed: {e}")
return "ERROR: Brain Offline"
# Running a quantized test on the Pi
if __name__ == "__main__":
brain = LocalBrain(model="phi3:mini")
print(brain.inference("What is the current state of the Raspberry Pi cluster?"))
বোর্ডই আপনাকে জানিয়ে দেয় সে কাজ করছে
আপনি একটি Pi-কে ভাবতে শুনতে পারেন। আমারটা গরম হতো, ফ্যান জোরে ঘুরত, আর পাশে বসে আমি টার্মিনালের দিকে না তাকিয়েই বুঝতে পারতাম সে কোনো প্রম্পটের মাঝখানে। এই মাপে থার্মাল থ্রটলিং স্পেক শিটের কোনো বিমূর্ত লাইন নয়; এটি আপনার ডেস্কের ওপর একটি শব্দ। অন্য যেকোনো কিছুর আগে বাতাস চলাচলের পরিকল্পনা করুন।
WSL2 নোট
আপনি যদি Windows-এ WSL2-তে এটা পরীক্ষা করেন, তাহলে Ollama-র এখন একটি নেটিভ Windows ইনস্টলার আছে যা আপনার NVIDIA GPU কাজে লাগায়। Windows অ্যাপটি চালান, তারপর সেই GPU-র শক্তি আপনার Linux পরিবেশ থেকে পেতে WSL2-এর ভেতরে OLLAMA_HOST=172.x.x.x (আপনার Windows Ethernet অ্যাডাপ্টারের IP) সেট করুন।
সমঝোতা
Raspberry Pi কোনো H100 নয়। আপনি যদি Pi-তে Llama 3-70B মডেল চালানোর চেষ্টা করেন, সেটা শুধু ধীর হবে না; OOM কিলার প্রসেসটি শেষ করে দেবে। সস্তা SD কার্ডে সোয়াপ চালু থাকলে শুধু থ্র্যাশিংই আপনার ফাইল সিস্টেম নষ্ট করে দিতে পারে।
আমি যে সবচেয়ে বড় ব্যর্থতার মুখে পড়েছিলাম তা হিট থ্রটলিং। একটি ভারী ব্যাচ-প্রসেসিং কাজের সময় Pi 5-এর তাপমাত্রা 85°C ছুঁয়েছিল আর ইনফারেন্সের গতি নেমে গিয়েছিল প্রতি সেকেন্ডে 0.5 টোকেনে। ল্যাব পরিবেশে লোকাল LLM-এর জন্য অ্যাক্টিভ কুলিং (Argon ONE কেসকে ধন্যবাদ) ঐচ্ছিক নয়; বাধ্যতামূলক।
আরও, ক্লাউড-স্তরের “সৃজনশীলতা” আশা করবেন না। লোকাল কোয়ান্টাইজড মডেল এক্সট্র্যাকশন, সারসংক্ষেপ আর মৌলিক লজিকের জন্য চমৎকার। সূক্ষ্মতা বা উচ্চ-স্তরের কৌশলগত পরিকল্পনায় সেগুলো ভয়ংকর।
আগামী দিনে
আমি এখন কনকারেন্সি-ফার্স্ট রাউটিং নিয়ে পরীক্ষা করছি: একটি মডেলকে তিন নোডে ভাগ করার বদলে তিনটি Pi নোডকেই সমান্তরাল ইনফারেন্স রিকোয়েস্ট সামলাতে ব্যবহার করা। লক্ষ্য একটি সত্যিকারের “সার্বভৌম ব্রেন”, যা শুধু ফলব্যাক হিসেবে নয়, ক্লাউড মডেলগুলোর লোকাল সহচর হিসেবে কাজ করবে এবং একসঙ্গে যুক্তি করা একাধিক এজেন্ট সামলাতে পারবে।
লেখক
Rohit BuraniAI ইঞ্জিনিয়ার, যিনি ল্যাব থেকে লোকাল-ফার্স্ট সিস্টেম, সেলফ-হোস্টেড অবকাঠামো এবং স্বয়ংক্রিয় টুল তৈরি করেন।