gekro
GitHub LinkedIn
Local LLM

হ্যালো, Ollama: লোকাল ইনফারেন্স আপনার আর্কিটেকচারের বিমা

6 মিনিটে পড়া যায়

এটি ইংরেজি মূল লেখাটির মেশিন অনুবাদ। কিছু সূক্ষ্মতা হারিয়ে যেতে পারে, তাই ইংরেজি সংস্করণই মূল রেফারেন্স। মূল ইংরেজি লেখাটি পড়ুন

সংক্ষেপে

Raspberry Pi-তে LLM চালানো শুধু শখ নয়; এটি সিস্টেমের স্থিতিস্থাপকতার জন্য একটি ফলব্যাক কৌশল।
লোকাল LLM-এর মার্কেটিংয়ের দিক গোপনীয়তা, কিন্তু ইঞ্জিনিয়ারিংয়ের বাস্তবতা স্থিতিস্থাপকতা। ভারী কাজের জন্য আমি Together AI ব্যবহার করি, কিন্তু আমার Raspberry Pi ক্লাস্টার শূন্য-খরচের ফলব্যাক হিসেবে Ollama-র মাধ্যমে কোয়ান্টাইজড Llama 3 মডেল চালায়। এই লেখায় সেই নির্দিষ্ট মডেল ও কোয়ান্ট স্তরগুলো আছে যা বোর্ড না গলিয়ে ARM হার্ডওয়্যারে সত্যিই চলে।

গভীর রাতের একটি বিল্ড সেশনে যখন আমার ইন্টারনেট চলে গেল আর তবুও আমার Raspberry Pi-তে একটি লোকাল Llama 3 ইনস্ট্যান্স প্রশ্নের উত্তর দিচ্ছিল, তখন বুঝলাম আমরা একটি মোড় ঘোরার বিন্দুতে পৌঁছেছি। মৌলিক রিজনিংয়ের কাজে আমরা আর বিলিয়ন ডলারের ডেটা সেন্টারের সঙ্গে স্থায়ী সংযোগের ওপর নির্ভরশীল নই। Gekro Lab-এ Ollama হলো সেই আর্কিটেকচারের বিমা পলিসি, যা কোনো প্রোভাইডারের বিভ্রাটের সময় আমার এজেন্টদের কাজ চালু রাখে।

আমি মহৎ কারণে এখানে শুরু করিনি। এর কারণ কৌতূহল আর খরচ। আমি চেয়েছিলাম জিনিসগুলো অবিরাম চলুক যাতে আমি শিখতে থাকি, আর আমি যেসব মডেল চেয়েছিলাম সেগুলোর নাগাল এমন খরচের আড়ালে ছিল যার প্রতিশ্রুতি আমি দিতে চাইনি। একটি Pi যা বিদ্যুতের দামে নিঃশব্দে চলতে থাকে, দুটো সমস্যারই সমাধান করে। ধীর, হ্যাঁ। তবু চালু।

আর্কিটেকচার

আমার সেটআপ একক মেশিন নয়; এটি একটি বিতরণকৃত ইনফারেন্স চেইন। উচ্চ-জটিলতার ক্লাউড রিজনিংয়ের জন্য আমি Together AI-কে অগ্রাধিকার দিই, কিন্তু ল্যাবের “স্নায়ুতন্ত্র” ভর করে আছে Ollama চালানো তিন-নোডের Raspberry Pi 5 ক্লাস্টারের (প্রতিটি 16GB) ওপর।

মডেলআকারকোয়ান্ট স্তরRAM ব্যবহারটোকেন/সেকেন্ড (Pi 5 16GB)সেরা ব্যবহার
Llama-3-8B4.7GBQ4_K_M~5.2GB4-6 t/sসাধারণ রিজনিং
Phi-3-Mini2.3GBQ4_0~2.8GB12-15 t/sদ্রুত শ্রেণিবিন্যাস
Mistral-7B4.1GBQ4_0~4.5GB3-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 Burani

লেখক

Rohit Burani

AI ইঞ্জিনিয়ার, যিনি ল্যাব থেকে লোকাল-ফার্স্ট সিস্টেম, সেলফ-হোস্টেড অবকাঠামো এবং স্বয়ংক্রিয় টুল তৈরি করেন।

পড়ার জন্য ধন্যবাদ।

লেখাটি ভালো লাগলে আপনার নেটওয়ার্কের সঙ্গে শেয়ার করুন।

← ব্লগে ফিরে যান