Tutorial Lengkap Replicate: Menjalankan dan Deploy Model ML via API

# Tutorial Lengkap Replicate: Menjalankan dan Deploy Model ML via API Replicate adalah platform cloud yang memungkinkan Anda menjalankan model machine learning melalui API tanpa perlu mengelola infra...

By Ruby Abdullah · · tutorial
ReplicateMLOpsAPIMachine LearningCog

Tutorial Lengkap Replicate: Menjalankan dan Deploy Model ML via API

Replicate adalah platform cloud yang memungkinkan Anda menjalankan model machine learning melalui API tanpa perlu mengelola infrastruktur GPU sendiri. Dengan Replicate, Anda bisa mengakses ribuan model open-source mulai dari image generation, LLM, speech-to-text, hingga video generation hanya dengan beberapa baris kode.

Platform ini sangat populer di kalangan developer karena kemudahannya: tidak perlu setup server, tidak perlu konfigurasi CUDA, dan model langsung siap digunakan melalui REST API atau Python SDK. Replicate juga menyediakan fitur untuk mendeploy model custom Anda sendiri menggunakan tool bernama Cog.

Dalam tutorial ini, kita akan mempelajari cara menggunakan Replicate mulai dari setup awal, menjalankan prediksi, streaming response, menggunakan webhooks, fine-tuning model, hingga packaging model custom dengan Cog.

Instalasi dan Setup

Membuat Akun dan API Token

Langkah pertama adalah membuat akun di Replicate. Setelah mendaftar, Anda bisa mendapatkan API token dari halaman Account Settings.

# Set API token sebagai environment variable

export REPLICATEAPITOKEN="r8yourapitokenhere"

Instalasi Python SDK

# Instalasi menggunakan pip

pip install replicate

Atau menggunakan uv (recommended)

uv pip install replicate

Verifikasi Instalasi

import replicate

import os

Pastikan token sudah di-set

assert os.environ.get("REPLICATEAPITOKEN"), "Token belum di-set!"

Test koneksi dengan menjalankan model sederhana

output = replicate.run(

"meta/meta-llama-3.1-8b-instruct",

input={"prompt": "Hello, world!"}

)

print("".join(output))

Menjalankan Prediksi (Basic Usage)

Text Generation dengan LLM

Cara paling sederhana untuk menjalankan model di Replicate adalah menggunakan fungsi replicate.run().

import replicate

Menjalankan Llama 3.1 untuk text generation

output = replicate.run(

"meta/meta-llama-3.1-70b-instruct",

input={

"prompt": "Jelaskan konsep machine learning dalam 3 paragraf",

"maxtokens": 512,

"temperature": 0.7,

"topp": 0.9,

"systemprompt": "Kamu adalah asisten AI yang membantu menjelaskan konsep teknologi dalam bahasa Indonesia."

}

)

Output adalah iterator, gabungkan menjadi string

result = "".join(output)

print(result)

Image Generation

import replicate

Generate gambar menggunakan SDXL

output = replicate.run(

"stability-ai/sdxl:39ed52f2a78e934b3ba6e2a89f5b1c712de7dfea535525255b1aa35c5565e08b",

input={

"prompt": "A futuristic city skyline at sunset, cyberpunk style, highly detailed",

"negativeprompt": "blurry, low quality, distorted",

"width": 1024,

"height": 1024,

"numoutputs": 1,

"scheduler": "KEULER",

"numinferencesteps": 30,

"guidancescale": 7.5

}

)

Output berupa list URL gambar

for i, url in enumerate(output):

print(f"Image {i+1}: {url}")

Image to Text (Vision Model)

import replicate

Menggunakan LLaVA untuk image understanding

output = replicate.run(

"yorickvp/llava-v1.6-34b:41ecfbfb261e6c1adf3ad896c9066ca98346996d7c4045c5bc944a79d430f174",

input={

"image": "https://example.com/photo.jpg",

"prompt": "Describe this image in detail"

}

)

result = "".join(output)

print(result)

Speech to Text (Whisper)

import replicate

Transkripsi audio menggunakan Whisper

output = replicate.run(

"openai/whisper:4d50797a6f35677e3f7e36c5b0d0c3c50e8a0b0e4e0e0e0e0e0e0e0e0e0e0e",

input={

"audio": open("recording.mp3", "rb"),

"model": "large-v3",

"language": "id",

"translate": False

}

)

print(output["transcription"])

Prediksi Asinkron

Untuk task yang membutuhkan waktu lama, gunakan prediksi asinkron agar tidak blocking.

Membuat Prediksi Asinkron

import replicate

Membuat prediksi tanpa menunggu hasilnya

prediction = replicate.predictions.create(

model="stability-ai/sdxl",

input={

"prompt": "A beautiful landscape painting in the style of Monet",

"width": 1024,

"height": 1024

}

)

print(f"Prediction ID: {prediction.id}")

print(f"Status: {prediction.status}")

Mengecek Status Prediksi

import replicate

import time

Buat prediksi

prediction = replicate.predictions.create(

model="stability-ai/sdxl",

input={"prompt": "A cat wearing a hat"}

)

Polling status

while prediction.status not in ["succeeded", "failed", "canceled"]:

time.sleep(2)

prediction.reload()

print(f"Status: {prediction.status}")

if prediction.status == "succeeded":

print(f"Output: {prediction.output}")

else:

print(f"Error: {prediction.error}")

Cancel Prediksi

import replicate

prediction = replicate.predictions.create(

model="meta/meta-llama-3.1-70b-instruct",

input={"prompt": "Write a very long essay..."}

)

Cancel jika tidak diperlukan lagi

replicate.predictions.cancel(prediction.id)

print(f"Status: {prediction.status}")

Streaming Response

Untuk model yang mendukung streaming (terutama LLM), Anda bisa mendapatkan output secara real-time.

Basic Streaming

import replicate

Stream output token by token

for event in replicate.stream(

"meta/meta-llama-3.1-8b-instruct",

input={

"prompt": "Tulis cerita pendek tentang robot yang belajar memasak",

"maxtokens": 500

}

):

print(str(event), end="", flush=True)

print() # New line di akhir

Streaming dengan Server-Sent Events

import replicate

Menggunakan event types untuk kontrol lebih detail

for event in replicate.stream(

"meta/meta-llama-3.1-70b-instruct",

input={

"prompt": "Explain quantum computing",

"maxtokens": 300

}

):

if event.event == "output":

print(str(event), end="", flush=True)

elif event.event == "done":

print("\n--- Stream selesai ---")

Webhooks

Webhooks memungkinkan Replicate mengirim notifikasi ke server Anda ketika prediksi selesai, tanpa perlu polling.

Setup Webhook

import replicate

Buat prediksi dengan webhook

prediction = replicate.predictions.create(

model="stability-ai/sdxl",

input={

"prompt": "A photo-realistic portrait of a cat astronaut"

},

webhook="https://your-server.com/api/replicate-webhook",

webhookeventsfilter=["completed"]

)

print(f"Prediction {prediction.id} dibuat, webhook akan dipanggil saat selesai")

Webhook Handler (FastAPI)

from fastapi import FastAPI, Request

import json

app = FastAPI()

@app.post("/api/replicate-webhook")

async def handlewebhook(request: Request):

payload = await request.json()

predictionid = payload["id"]

status = payload["status"]

if status == "succeeded":

output = payload["output"]

print(f"Prediction {predictionid} selesai!")

print(f"Output: {output}")

# Proses output (simpan ke database, kirim ke user, dll)

elif status == "failed":

error = payload["error"]

print(f"Prediction {predictionid} gagal: {error}")

return {"status": "ok"}

Webhook Handler (Express.js)

const express = require('express');

const app = express();

app.use(express.json());

app.post('/api/replicate-webhook', (req, res) => {

const { id, status, output, error } = req.body;

if (status === 'succeeded') {

console.log(Prediction ${id} selesai:, output);

// Proses output

} else if (status === 'failed') {

console.error(Prediction ${id} gagal:, error);

}

res.json({ status: 'ok' });

});

app.listen(3000);

File Input dan Output

Upload File untuk Input

import replicate

Menggunakan file lokal sebagai input

with open("inputimage.jpg", "rb") as f:

output = replicate.run(

"sczhou/codeformer:7de2ea26c616d5bf2245ad0d5e24f0ff9a6204578a5c876db53142edd9d2cd56",

input={

"image": f,

"fidelity": 0.7,

"upscale": 2

}

)

print(f"Enhanced image URL: {output}")

Download Output

import replicate

import httpx

Generate gambar

output = replicate.run(

"stability-ai/sdxl",

input={"prompt": "A serene mountain lake at dawn"}

)

Download hasil

for i, url in enumerate(output):

response = httpx.get(url)

with open(f"output{i}.png", "wb") as f:

f.write(response.content)

print(f"Saved output{i}.png")

Menggunakan REST API Langsung

Selain Python SDK, Anda bisa menggunakan REST API secara langsung dengan curl atau HTTP client apapun.

Membuat Prediksi via curl

curl -s -X POST "https://api.replicate.com/v1/predictions" \

-H "Authorization: Bearer $REPLICATEAPITOKEN" \

-H "Content-Type: application/json" \

-d '{

"version": "39ed52f2a78e934b3ba6e2a89f5b1c712de7dfea535525255b1aa35c5565e08b",

"input": {

"prompt": "A beautiful sunset over the ocean"

}

}'

Menggunakan Official Model

# Untuk official models, gunakan endpoint model langsung

curl -s -X POST "https://api.replicate.com/v1/models/meta/meta-llama-3.1-8b-instruct/predictions" \

-H "Authorization: Bearer $REPLICATEAPITOKEN" \

-H "Content-Type: application/json" \

-d '{

"input": {

"prompt": "What is machine learning?"

}

}'

Mengecek Status via curl

curl -s "https://api.replicate.com/v1/predictions/PREDICTIONID" \

-H "Authorization: Bearer $REPLICATEAPITOKEN"

Packaging Model dengan Cog

Cog adalah tool open-source dari Replicate untuk packaging model ML ke dalam container Docker yang siap deploy.

Instalasi Cog

# macOS

brew install cog

Linux

sudo curl -o /usr/local/bin/cog -L "https://github.com/replicate/cog/releases/latest/download/cog$(uname -s)$(uname -m)"

sudo chmod +x /usr/local/bin/cog

Struktur Project Cog

my-model/

cog.yaml # Konfigurasi environment

predict.py # Kode prediksi

weights/ # Model weights (opsional)

Konfigurasi cog.yaml

build:

pythonversion: "3.11"

pythonpackages:

  • "torch==2.1.0"
  • "torchvision==0.16.0"
  • "transformers==4.36.0"
  • "Pillow==10.1.0"
gpu: true

cuda: "12.1"

systempackages:

  • "libgl1-mesa-glx"

predict: "predict.py:Predictor"

import torch

from cog import BasePredictor, Input, Path

from transformers import AutoModelForCausalLM, AutoTokenizer

class Predictor(BasePredictor):

def setup(self):

"""Load model ke memori saat container start."""

self.modelname = "microsoft/DialoGPT-medium"

self.tokenizer = AutoTokenizer.frompretrained(self.modelname)

self.model = AutoModelForCausalLM.frompretrained(self.modelname)

self.model.eval()

def predict(

self,

prompt: str = Input(description="Input text prompt"),

maxlength: int = Input(description="Maximum response length", default=100, ge=1, le=500),

temperature: float = Input(description="Sampling temperature", default=0.7, ge=0.1, le=2.0),

) -> str:

"""Jalankan prediksi pada input."""

inputids = self.tokenizer.encode(prompt + self.tokenizer.eostoken, returntensors="pt")

with torch.nograd():

output = self.model.generate(

inputids,

maxlength=maxlength,

temperature=temperature,

dosample=True,

topp=0.9,

padtokenid=self.tokenizer.eostokenid

)

response = self.tokenizer.decode(output[:, inputids.shape[-1]:][0], skipspecialtokens=True)

return response

Predictor dengan Image Output

from cog import BasePredictor, Input, Path

from diffusers import StableDiffusionPipeline

import torch

class Predictor(BasePredictor):

def setup(self):

self.pipe = StableDiffusionPipeline.frompretrained(

"runwayml/stable-diffusion-v1-5",

torchdtype=torch.float16

).to("cuda")

def predict(

self,

prompt: str = Input(description="Text prompt for image generation"),

numinferencesteps: int = Input(description="Number of denoising steps", default=30, ge=1, le=100),

guidancescale: float = Input(description="Guidance scale", default=7.5, ge=1.0, le=20.0),

) -> Path:

"""Generate image dari text prompt."""

image = self.pipe(

prompt,

numinferencesteps=numinferencesteps,

guidancescale=guidancescale

).images[0]

outputpath = Path("/tmp/output.png")

image.save(outputpath)

return outputpath

Test Lokal dan Push

# Test prediksi secara lokal

cog predict -i prompt="Hello world"

Build Docker image

cog build -t my-model

Push ke Replicate

cog push r8.im/username/my-model

Fine-tuning Model

Replicate mendukung fine-tuning untuk beberapa model populer.

Fine-tuning SDXL

import replicate

Buat training

training = replicate.trainings.create(

model="stability-ai/sdxl",

version="39ed52f2a78e934b3ba6e2a89f5b1c712de7dfea535525255b1aa35c5565e08b",

input={

"inputimages": "https://example.com/training-images.zip",

"tokenstring": "TOK",

"captionprefix": "a photo of TOK, ",

"maxtrainsteps": 1000,

"usefacedetectioninstead": False,

"learningrate": 1e-4

},

destination="username/my-custom-sdxl"

)

print(f"Training ID: {training.id}")

print(f"Status: {training.status}")

Monitoring Training Progress

import replicate

import time

training = replicate.trainings.get("TRAININGID")

while training.status not in ["succeeded", "failed", "canceled"]:

time.sleep(30)

training.reload()

print(f"Status: {training.status}")

if training.logs:

print(f"Logs: {training.logs[-200:]}")

if training.status == "succeeded":

print(f"Model berhasil di-fine-tune!")

print(f"Version: {training.output['version']}")

Menggunakan Model yang Sudah Di-fine-tune

import replicate

Gunakan model custom hasil fine-tuning

output = replicate.run(

"username/my-custom-sdxl:versionid",

input={

"prompt": "A photo of TOK in a beautiful garden",

"numoutputs": 4

}

)

for url in output:

print(url)

Deployment dan Model Management

Membuat Deployment

import replicate

Buat deployment dengan hardware khusus

deployment = replicate.deployments.create(

name="my-llm-deployment",

model="meta/meta-llama-3.1-8b-instruct",

hardware="gpu-a40-large",

mininstances=1,

maxinstances=5

)

print(f"Deployment created: {deployment.name}")

Menjalankan Prediksi pada Deployment

import replicate

Jalankan prediksi pada deployment spesifik

deployment = replicate.deployments.get("username/my-llm-deployment")

prediction = deployment.predictions.create(

input={

"prompt": "Explain the theory of relativity",

"maxtokens": 256

}

)

prediction.wait()

print(prediction.output)

Listing Models

import replicate

Cari model berdasarkan keyword

models = replicate.models.search("text-to-image")

for model in models:

print(f"{model.owner}/{model.name}: {model.description}")

Integrasi dengan Framework Populer

Integrasi dengan LangChain

from langchaincommunity.llms import Replicate

llm = Replicate(

model="meta/meta-llama-3.1-70b-instruct",

modelkwargs={

"temperature": 0.7,

"maxtokens": 500,

"topp": 0.9

}

)

response = llm.invoke("Apa itu neural network?")

print(response)

Integrasi dengan FastAPI

from fastapi import FastAPI

from fastapi.responses import StreamingResponse

import replicate

app = FastAPI()

@app.post("/generate")

async def generatetext(prompt: str):

output = replicate.run(

"meta/meta-llama-3.1-8b-instruct",

input={"prompt": prompt, "maxtokens": 500}

)

return {"response": "".join(output)}

@app.post("/generate/stream")

async def generatestream(prompt: str):

def stream():

for event in replicate.stream(

"meta/meta-llama-3.1-8b-instruct",

input={"prompt": prompt, "maxtokens": 500}

):

yield str(event)

return StreamingResponse(stream(), mediatype="text/plain")

Best Practices

1. Error Handling yang Tepat

import replicate

from replicate.exceptions import ReplicateError, ModelError

try:

output = replicate.run(

"stability-ai/sdxl",

input={"prompt": "A beautiful landscape"}

)

except ModelError as e:

print(f"Model error: {e}")

except ReplicateError as e:

print(f"API error: {e}")

except Exception as e:

print(f"Unexpected error: {e}")

2. Menggunakan Versi Model yang Spesifik

# Selalu pin versi model untuk production

output = replicate.run(

"stability-ai/sdxl:39ed52f2a78e934b3ba6e2a89f5b1c712de7dfea535525255b1aa35c5565e08b",

input={"prompt": "test"}

)

3. Batch Processing

import replicate

import asyncio

async def batchpredict(prompts):

predictions = []

for prompt in prompts:

prediction = replicate.predictions.create(

model="meta/meta-llama-3.1-8b-instruct",

input={"prompt": prompt, "maxtokens": 200}

)

predictions.append(prediction)

results = []

for prediction in predictions:

prediction.wait()

results.append("".join(prediction.output))

return results

prompts = [

"Jelaskan apa itu Python",

"Jelaskan apa itu JavaScript",

"Jelaskan apa itu Rust"

]

results = asyncio.run(batchpredict(prompts))

for prompt, result in zip(prompts, results):

print(f"Q: {prompt}")

print(f"A: {result}\n")

4. Cost Management

import replicate

Cek hardware requirements dan pricing sebelum menjalankan model

model = replicate.models.get("meta/meta-llama-3.1-70b-instruct")

latestversion = model.latestversion

print(f"Model: {model.owner}/{model.name}")

print(f"Description: {model.description}")

List semua prediksi untuk monitoring cost

predictions = replicate.predictions.list()

for p in predictions:

if p.metrics and "predicttime" in p.metrics:

print(f"ID: {p.id}, Time: {p.metrics['predicttime']:.2f}s, Status: {p.status}")

5. Timeout dan Retry

import replicate

import time

def runwithretry(model, inputdata, maxretries=3, timeout=300):

for attempt in range(maxretries):

try:

prediction = replicate.predictions.create(

model=model,

input=inputdata

)

starttime = time.time()

while prediction.status not in ["succeeded", "failed", "canceled"]:

if time.time() - starttime > timeout:

replicate.predictions.cancel(prediction.id)

raise TimeoutError(f"Prediction timed out after {timeout}s")

time.sleep(2)

prediction.reload()

if prediction.status == "succeeded":

return prediction.output

raise Exception(f"Prediction failed: {prediction.error}")

except TimeoutError:

if attempt < maxretries - 1:

print(f"Attempt {attempt + 1} timed out, retrying...")

continue

raise

raise Exception(f"Failed after {max_retries} attempts")

Kesimpulan

Replicate menyederhanakan proses menjalankan dan mendeploy model machine learning dengan menyediakan API yang mudah digunakan dan infrastruktur GPU yang terkelola. Berikut ringkasan poin-poin penting:

  • Kemudahan Akses: Jalankan ribuan model open-source tanpa setup infrastruktur melalui Python SDK atau REST API.
  • Streaming: Gunakan replicate.stream() untuk mendapatkan output LLM secara real-time, memberikan pengalaman pengguna yang lebih baik.
  • Webhooks: Untuk task berdurasi panjang, gunakan webhooks agar server Anda mendapat notifikasi otomatis saat prediksi selesai.
  • Cog: Package model custom Anda ke dalam container yang siap deploy ke Replicate menggunakan Cog.
  • Fine-tuning: Manfaatkan fitur fine-tuning untuk mengadaptasi model seperti SDXL dengan dataset custom Anda.
  • Deployment: Buat deployment khusus dengan hardware dan scaling yang bisa dikonfigurasi sesuai kebutuhan.
  • Integrasi: Replicate terintegrasi dengan baik dengan framework seperti LangChain dan FastAPI.

Dengan memahami fitur-fitur ini, Anda bisa membangun aplikasi AI yang powerful tanpa harus mengelola kompleksitas infrastruktur GPU secara langsung.

Artikel Terkait

Tutorial Lengkap FastAPI untuk Machine Learning: Building Production ML APIs

Tutorial Lengkap FastAPI untuk ML: Build Production ML APIs FastAPI adalah framework web Python modern dengan performa t...

ZenML: Bikin Pipeline ML dan LLM yang Portable dan Siap Produksi

ZenML: Bikin Pipeline ML dan LLM yang Portable dan Siap Produksi Halo temen-temen, ketemu lagi sama aku, Ruby Abdullah. ...

Tutorial Lengkap Comet ML: Platform MLOps untuk Experiment Tracking dan Model Management

Tutorial Lengkap Comet ML: Platform MLOps untuk Experiment Tracking dan Model Management Dalam dunia machine learning mo...

Tutorial Lengkap Vertex AI: Platform ML Terpadu Google Cloud

Tutorial Lengkap Vertex AI: Platform ML Terpadu di Google Cloud Vertex AI adalah platform machine learning terpadu Googl...