Penerapan Agen Ringan di Perangkat Tepi
Menjalankan model kecil pada Raspberry Pi dan perangkat tepi untuk respons berlatensi rendah.
Penerapan Agen Ringan di Perangkat Tepi adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Agen AI pada Perangkat Tepi
Agen tepi berjalan langsung pada perangkat IoT atau gateway lokal — Raspberry Pi, Jetson Nano, atau PC industri — bukan di cloud. Manfaatnya: latensi lebih rendah (tanpa perjalanan pulang-pergi), tetap berfungsi saat luring, dan biaya bandwidth lebih rendah. Konsekuensinya: komputasi dan RAM yang terbatas memerlukan model yang lebih kecil dan efisien.
Memilih Model untuk Penerapan di Perangkat Tepi
Perangkat tepi tidak dapat menjalankan GPT-4o atau Claude Opus. Model kecil yang dapat berjalan pada Raspberry Pi 5 (RAM 8 GB): Phi-3-mini (3,8 miliar parameter), Gemma-2B, TinyLlama-1.1B. Jika dikuantisasi menjadi 4-bit, model-model ini memerlukan RAM 1–3 GB dan berjalan pada kecepatan 5–15 token per detik di CPU.
# Model size reference for edge selection:
EDGE_MODELS = {
'tinyllama-1.1b-q4': {
'params': '1.1B', 'quantization': 'Q4_K_M',
'ram_gb': 0.8, 'tokens_per_sec_cpu': 15,
'use_case': 'simple classification, keyword detection'
},
'phi-3-mini-q4': {
'params': '3.8B', 'quantization': 'Q4_K_M',
'ram_gb': 2.5, 'tokens_per_sec_cpu': 8,
'use_case': 'reasoning, multi-step decisions'
},
'gemma-2b-q4': {
'params': '2B', 'quantization': 'Q4_K_M',
'ram_gb': 1.5, 'tokens_per_sec_cpu': 10,
'use_case': 'general assistant tasks'
}
}
for name, info in EDGE_MODELS.items():
print(f'{name}: {info["ram_gb"]}GB RAM, '
f'{info["tokens_per_sec_cpu"]} tok/s — {info["use_case"]}')Menginstal Ollama pada Raspberry Pi
Ollama adalah cara termudah untuk menjalankan LLM kecil pada perangkat keras lokal. Ollama mengelola pengunduhan model, kuantisasi, dan API REST lokal yang kompatibel dengan OpenAI SDK. Satu perintah menginstalnya; perintah lain mengunduh dan menjalankan model.
# Install Ollama (run on the Raspberry Pi terminal):
# curl -fsSL https://ollama.ai/install.sh | sh
# Pull and run a model:
# ollama pull phi3:mini
# ollama serve (starts API on localhost:11434)
# Python client — uses the OpenAI-compatible endpoint:
from openai import OpenAI
local_client = OpenAI(
base_url='http://localhost:11434/v1',
api_key='ollama' # Ollama ignores this but it is required by the SDK
)
def local_inference(prompt: str, model: str = 'phi3:mini') -> str:
response = local_client.chat.completions.create(
model=model,
messages=[{'role': 'user', 'content': prompt}],
max_tokens=256,
temperature=0.1
)
return response.choices[0].message.content
result = local_inference('Is temperature 45C dangerous for a server room?')
print(result)Kuantisasi GGUF 4-Bit
GGUF (GPT-Generated Unified Format) adalah format berkas yang digunakan oleh llama.cpp dan Ollama untuk model terkuantisasi. Q4_K_M berarti kuantisasi campuran 4-bit — sekitar 75% lebih kecil daripada fp32, dengan penurunan kualitas minimal untuk tugas penalaran di perangkat tepi.
# Understanding quantisation quality levels:
QUANTISATION_GUIDE = {
'Q2_K': {'size_multiplier': 0.25, 'quality': 'poor', 'ram': 'minimal'},
'Q4_K_M': {'size_multiplier': 0.45, 'quality': 'good', 'ram': 'low'},
'Q5_K_M': {'size_multiplier': 0.55, 'quality': 'better', 'ram': 'medium'},
'Q8_0': {'size_multiplier': 0.75, 'quality': 'near-original', 'ram': 'high'},
'F16': {'size_multiplier': 1.0, 'quality': 'original', 'ram': 'full'}
}
# For edge: Q4_K_M is the sweet spot
# 7B model: 7B * 4bit/8 = 3.5 GB in Q4 vs 14 GB in F16
def estimate_vram_gb(param_billions: float, quant: str) -> float:
multiplier = QUANT_GUIDE = {
'Q4_K_M': 0.45, 'Q8_0': 0.75, 'F16': 1.0
}
return round(param_billions * multiplier.get(quant, 0.5), 2)
print(f'Phi-3-mini Q4_K_M: {estimate_vram_gb(3.8, "Q4_K_M")} GB')
print(f'Phi-3-mini F16: {estimate_vram_gb(3.8, "F16")} GB')Mengoptimalkan Kecepatan Inferensi pada CPU
Pada perangkat tepi yang hanya menggunakan CPU, kecepatan inferensi bergantung pada jumlah utas dan penyimpanan tembolok instruksi. Tetapkan jumlah utas agar sesuai dengan jumlah inti CPU, buat instruksi sistem tetap singkat (instruksi tersebut diproses ulang pada setiap pemanggilan jika tidak disimpan dalam tembolok), dan kelompokkan kueri berulang jika memungkinkan.
import os
import time
# Ollama environment variables for performance tuning
# Set before starting the Ollama service:
# OLLAMA_NUM_PARALLEL=1 (single request at a time on small devices)
# OLLAMA_MAX_LOADED_MODELS=1 (only keep one model in RAM)
def timed_inference(prompt: str, client, model: str = 'phi3:mini') -> dict:
start = time.time()
response = client.chat.completions.create(
model=model,
messages=[{'role': 'user', 'content': prompt}],
max_tokens=128
)
elapsed = time.time() - start
text = response.choices[0].message.content
tokens = len(text.split()) # approximate
return {
'text': text,
'elapsed_s': round(elapsed, 2),
'approx_tps': round(tokens / elapsed, 1)
}
result = timed_inference('Classify: temperature=45C, normal range 18-30C. Action?',
local_client)
print(result)Arsitektur Hibrida Tepi dan Awan
Arsitektur yang optimal menggunakan model tepi untuk keputusan yang cepat dan berisiko rendah (klasifikasi, logika ambang), lalu menyinkronkan data ke model awan untuk keputusan yang kompleks, jarang terjadi, atau berisiko tinggi. Agen tepi mengantrekan kueri kompleks dan mengirimkannya saat konektivitas memungkinkan.
import anthropic
import time
class HybridAgent:
def __init__(self, edge_client, cloud_api_key: str):
self.edge = edge_client # Ollama local client
self.cloud = anthropic.Anthropic(api_key=cloud_api_key)
self.pending_cloud_queries = []
def decide(self, context: dict) -> str:
# Fast path: edge model for simple binary decisions
simple_prompt = (
f'Sensor: {context}. '
'Respond with exactly one word: NORMAL or ALERT.'
)
edge_result = self.edge.chat.completions.create(
model='phi3:mini',
messages=[{'role': 'user', 'content': simple_prompt}],
max_tokens=5
).choices[0].message.content.strip()
if edge_result == 'ALERT':
# Queue complex analysis for cloud
self.pending_cloud_queries.append(context)
return edge_result
def sync_to_cloud(self):
"""Call when online connectivity is available."""
for ctx in self.pending_cloud_queries:
result = self.cloud.messages.create(
model='claude-opus-4-5', max_tokens=512,
messages=[{'role': 'user', 'content':
f'Full analysis of: {ctx}'}]
)
print('Cloud analysis:', result.content[0].text[:100])
self.pending_cloud_queries.clear()Antrean Luring untuk Sinkronisasi Awan
Agen tepi sering beroperasi di lingkungan dengan konektivitas yang terputus-putus. Simpan sementara kueri, pembacaan sensor, dan log tindakan secara lokal, lalu kirimkan ke awan saat konektivitas pulih. Gunakan basis data SQLite sebagai penyangga lokal.
import sqlite3
import json
from datetime import datetime
DB_PATH = '/home/pi/agent_buffer.db'
def init_buffer_db():
conn = sqlite3.connect(DB_PATH)
conn.execute("""
CREATE TABLE IF NOT EXISTS sync_queue (
id INTEGER PRIMARY KEY AUTOINCREMENT,
type TEXT NOT NULL,
payload TEXT NOT NULL,
created_at TEXT NOT NULL,
synced INTEGER DEFAULT 0
)
""")
conn.commit()
conn.close()
def buffer_for_sync(record_type: str, payload: dict):
conn = sqlite3.connect(DB_PATH)
conn.execute(
'INSERT INTO sync_queue (type, payload, created_at) VALUES (?, ?, ?)',
(record_type, json.dumps(payload), datetime.utcnow().isoformat())
)
conn.commit()
conn.close()
def flush_to_cloud(cloud_fn):
conn = sqlite3.connect(DB_PATH)
rows = conn.execute(
'SELECT id, type, payload FROM sync_queue WHERE synced=0 LIMIT 100'
).fetchall()
for row_id, r_type, payload in rows:
cloud_fn(r_type, json.loads(payload))
conn.execute('UPDATE sync_queue SET synced=1 WHERE id=?', (row_id,))
conn.commit()
conn.close()
print(f'Synced {len(rows)} records to cloud')
if __name__ == '__main__':
import os, tempfile
DB_PATH = os.path.join(tempfile.gettempdir(), 'agent_buffer_demo.db')
init_buffer_db()
buffer_for_sync('sensor_reading', {'temp': 22.5})
flush_to_cloud(lambda t, p: print(f'Synced to cloud: {t} -> {p}'))
Memantau Kesehatan Agen Tepi
Perangkat tepi dapat menjadi terlalu panas, kehabisan RAM, atau mengalami kemacetan inferensi model. Terapkan pemantau kesehatan yang memeriksa suhu CPU, RAM yang tersedia, dan latensi inferensi, lalu menerbitkan metrik kesehatan ke awan.
import subprocess
import psutil # pip install psutil
def get_edge_health() -> dict:
cpu_percent = psutil.cpu_percent(interval=1)
ram = psutil.virtual_memory()
disk = psutil.disk_usage('/')
# Read CPU temperature (Raspberry Pi specific)
try:
temp_output = subprocess.check_output(
['vcgencmd', 'measure_temp'], text=True
)
cpu_temp = float(temp_output.strip().replace("temp=", "").replace("'C", ""))
except Exception:
cpu_temp = -1.0 # not available on non-Pi hardware
return {
'cpu_percent': cpu_percent,
'cpu_temp_c': cpu_temp,
'ram_used_pct': ram.percent,
'ram_available_mb': round(ram.available / 1024 / 1024),
'disk_used_pct': disk.percent,
'timestamp': datetime.utcnow().isoformat()
}
health = get_edge_health()
print('Edge health:', health)Penyimpanan Tembolok Inferensi untuk Agen Tepi
Model tepi lambat; simpan respons dalam tembolok untuk input yang identik. Untuk tugas klasifikasi sensor, perintah yang sama (misalnya, "temperature=23.5, classify") sering berulang. Tembolok kamus sederhana dengan TTL menghindari panggilan inferensi yang tidak perlu.
from datetime import datetime, timedelta
import hashlib
class InferenceCache:
def __init__(self, ttl_seconds: int = 60):
self.ttl = timedelta(seconds=ttl_seconds)
self._cache: dict = {} # hash -> {'result', 'expires'}
def _key(self, prompt: str) -> str:
return hashlib.md5(prompt.encode()).hexdigest()
def get(self, prompt: str):
key = self._key(prompt)
entry = self._cache.get(key)
if entry and datetime.utcnow() < entry['expires']:
return entry['result']
return None
def set(self, prompt: str, result: str):
key = self._key(prompt)
self._cache[key] = {
'result': result,
'expires': datetime.utcnow() + self.ttl
}
cache = InferenceCache(ttl_seconds=60)
def cached_edge_inference(prompt: str, client) -> str:
cached = cache.get(prompt)
if cached:
print('Cache hit')
return cached
result = local_inference(prompt, client)
cache.set(prompt, result)
return resultDaftar Periksa Penerapan
Sebelum menerapkan agen tepi ke lingkungan produksi, pastikan hal-hal berikut: model muat di RAM yang tersedia dengan cadangan 20%, latensi inferensi memenuhi kebutuhan respons peristiwa, penyangga luring telah diuji, pemantauan kesehatan menerbitkan metrik, dan mulai ulang otomatis saat terjadi kerusakan telah dikonfigurasi.
# systemd service file for auto-restart (save as /etc/systemd/system/edge-agent.service)
SYSTEMD_SERVICE = '''
[Unit]
Description=IoT Edge Agent
After=network.target ollama.service
Requires=ollama.service
[Service]
User=pi
WorkingDirectory=/home/pi/edge-agent
ExecStart=/usr/bin/python3 /home/pi/edge-agent/agent.py
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
'''
# Enable:
# sudo systemctl enable edge-agent
# sudo systemctl start edge-agent
# sudo journalctl -u edge-agent -f (follow logs)
print('Deployment checklist:')
checklist = [
'Model RAM fits with 20% headroom',
'Inference latency < response time requirement',
'Offline SQLite buffer tested',
'Health metrics publishing to cloud',
'systemd auto-restart configured'
]
for item in checklist:
print(f' [ ] {item}')Penyiapan Perangkat Keras Raspberry Pi
Sebelum menerapkan perangkat lunak, siapkan perangkat keras. Raspberry Pi 5 dengan RAM 8 GB adalah spesifikasi minimum yang direkomendasikan untuk menjalankan Phi-3-mini. Aktifkan pembagian memori GPU, nonaktifkan swap (karena mempercepat keausan penyimpanan flash), dan konfigurasikan IP statis untuk akses jarak jauh yang andal.
# Raspberry Pi setup notes (run manually over SSH):
# sudo raspi-config -> System -> GPU Memory -> 256
# Disable swap to protect SD card:
# sudo dphys-swapfile swapoff && sudo dphys-swapfile uninstall
def check_available_ram_mb():
try:
with open('/proc/meminfo') as f:
for line in f:
if line.startswith('MemAvailable'):
return int(line.split()[1]) // 1024
except FileNotFoundError:
return None
ram_mb = check_available_ram_mb()
if ram_mb is None:
print('Could not read /proc/meminfo on this OS — simulated Pi reading: MemAvailable ~ 850 MB')
else:
print(f'Available RAM: {ram_mb} MB')Uji Pengetahuan
Apa arti kuantisasi Q4_K_M bagi model bahasa?
Rangkuman: Penerapan Agen Ringan di Tepi
Yang dibahas dalam pelajaran ini:
- Pemilihan model: Phi-3-mini, Gemma-2B, TinyLlama untuk perangkat tepi; kuantisasi Q4_K_M
- Ollama: server LLM lokal dengan API yang kompatibel dengan OpenAI pada port 11434
- Arsitektur hibrida: model tepi untuk keputusan cepat, awan untuk analisis kompleks
- Penyangga luring: antrean SQLite yang dikirim ke awan saat tersambung kembali
- Tembolok inferensi: tembolok TTL menghindari inferensi berulang untuk perintah yang identik
- Penerapan: layanan systemd untuk mulai ulang otomatis saat terjadi kerusakan
Kursus berikutnya: Pasar Agen dan Sistem Pengaya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penerapan Agen Ringan di Perangkat Tepi” gratis?
Ya — teks lengkap “Penerapan Agen Ringan di Perangkat Tepi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Penerapan Agen Ringan di Perangkat Tepi”?
Menjalankan model kecil pada Raspberry Pi dan perangkat tepi untuk respons berlatensi rendah. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Penerapan Agen Ringan di Perangkat Tepi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?
Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Protokol MQTT untuk Integrasi Agen
- Pemrosesan Data Deret Waktu dalam Agen
- Respons Otomatis terhadap Peristiwa Sensor
- Penerapan Agen Ringan di Perangkat Tepi