FastAPI ကို အသုံးပြု၍ စွမ်းဆောင်ရည်မြင့်မားသော၊ ထုတ်လုပ်မှုအတွက်အဆင်သင့်ဖြစ်သော LLM API ကိုတည်ဆောက်ခြင်း- အဆင့်ဆင့်လမ်းညွှန်
FastAPI ကို အသုံးပြု၍ စွမ်းဆောင်ရည်မြင့်မားသော၊ ထုတ်လုပ်မှုအတွက်အဆင်သင့်ဖြစ်သော LLM API ကိုတည်ဆောက်ခြင်း- အဆင့်ဆင့်လမ်းညွှန်
FastAPI သည် ခေတ်မီ၊ စွမ်းဆောင်ရည်မြင့်မားသော Python Web framework တစ်ခုဖြစ်ပြီး အသုံးပြုရလွယ်ကူခြင်း၊ မြန်ဆန်ခြင်းနှင့် အလိုအလျောက်ထုတ်လုပ်ပေးသော API စာရွက်စာတမ်းများကြောင့် လူကြိုက်များသည်။ အထူးသဖြင့် LLM (Large Language Model) application များ၏ backend API ကိုတည်ဆောက်ရာတွင် FastAPI သည် အားကောင်းသောအားသာချက်များကိုပြသထားသည်။ ဤဆောင်းပါးသည် FastAPI ကိုအသုံးပြု၍ ထုတ်လုပ်မှုအတွက်အဆင်သင့်ဖြစ်သော LLM API ကိုမည်သို့တည်ဆောက်ရမည်ကို အဆင့်ဆင့်သင်ကြားပေးမည်ဖြစ်ပြီး အကောင်းဆုံးအလေ့အကျင့်အချို့ကိုလည်း ဆွေးနွေးပါမည်။
FastAPI ကိုဘာကြောင့်ရွေးချယ်သင့်တာလဲ။
LLM application များ၏ API ကိုတည်ဆောက်ရာတွင် FastAPI သည် အောက်ပါအဓိကအားသာချက်များကို ပေးဆောင်သည်-
- စွမ်းဆောင်ရည်မြင့်မားခြင်း: ASGI ကိုအခြေခံထားသော FastAPI သည် မြင့်မားသော concurrency request များကို ကိုင်တွယ်နိုင်ပြီး မြန်ဆန်သောတုံ့ပြန်မှုလိုအပ်သော LLM application များအတွက် အရေးကြီးပါသည်။
- Async ပံ့ပိုးမှု: FastAPI တွင်
asyncနှင့်awaitkeywords များအတွက် built-in ပံ့ပိုးမှုပါရှိပြီး LLM inference ကိုခေါ်ဆိုခြင်းကဲ့သို့သော asynchronous လုပ်ဆောင်ချက်များကို အဆင်ပြေချောမွေ့စွာ ကိုင်တွယ်နိုင်ပြီး main thread ကိုပိတ်ဆို့ခြင်းကို ရှောင်ရှားနိုင်သည်။ - အလိုအလျောက် API စာရွက်စာတမ်းများ: FastAPI သည် အပြန်အလှန်အကျိုးသက်ရောက်မှုရှိသော API စာရွက်စာတမ်းများ (Swagger UI) ကို အလိုအလျောက်ထုတ်လုပ်ရန် OpenAPI နှင့် JSON Schema ကိုအသုံးပြုထားပြီး developer များအတွက် သင်၏ API ကိုစမ်းသပ်ရန်နှင့် အသုံးပြုရန် အဆင်ပြေစေသည်။
- Data စစ်ဆေးခြင်း: FastAPI သည် request parameters များ၏မှန်ကန်မှုကိုသေချာစေရန်နှင့် အမှားများကိုလျှော့ချရန် Pydantic ကို အသုံးပြု၍ data စစ်ဆေးခြင်းကိုပြုလုပ်သည်။
- Dependency Injection: FastAPI ၏ dependency injection system သည် LLM model ကဲ့သို့သော resources များကိုစီမံခန့်ခွဲရန်နှင့် မျှဝေရန် အဆင်ပြေစေသည်။
- တက်ကြွသော Community: FastAPI တွင် ကြီးမားပြီးတက်ကြွသော community ရှိပြီး ကြွယ်ဝသော resources များနှင့် ပံ့ပိုးမှုများကို ရရှိနိုင်သည်။
ပြင်ဆင်မှုများ
-
Python ကိုထည့်သွင်းပါ: Python 3.7 သို့မဟုတ် အထက်ဗားရှင်းကို ထည့်သွင်းထားကြောင်း သေချာပါစေ။
-
FastAPI နှင့် Uvicorn ကိုထည့်သွင်းပါ: FastAPI နှင့် Uvicorn (ASGI server) ကို pip ကို အသုံးပြု၍ ထည့်သွင်းပါ-
pip install fastapi uvicorn -
LLM မော်ဒယ်ကိုရွေးချယ်ပါ: သင်အသုံးပြုလိုသော LLM မော်ဒယ်ကိုရွေးချယ်ပါ။ OpenAI ၏ မော်ဒယ်တစ်ခုဖြစ်နိုင်သည်၊ သို့မဟုတ် TinyLlama ကဲ့သို့သော open source မော်ဒယ်တစ်ခုလည်းဖြစ်နိုင်သည်။ OpenAI ကိုရွေးချယ်ပါက OpenAI API key ကိုရယူရန်လိုအပ်သည်။ TinyLlama ကိုရွေးချယ်ပါက မော်ဒယ်ဖိုင်ကို ဒေါင်းလုဒ်လုပ်ရန်လိုအပ်သည်။
အဆင့် ၁: FastAPI application ကိုဖန်တီးပါ
main.py အမည်ရှိ ဖိုင်တစ်ခုကိုဖန်တီးပြီး အောက်ပါကုဒ်ကိုထည့်ပါ-
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI(title="LLM API", description="A simple API for interacting with LLMs.")
class InputText(BaseModel):
text: str
class OutputText(BaseModel):
generated_text: str
ဤကုဒ်သည် FastAPI application တစ်ခုကိုသတ်မှတ်ပြီး Pydantic မော်ဒယ်နှစ်ခုကိုသတ်မှတ်သည်- InputText သည် input စာသားကိုလက်ခံရန်နှင့် OutputText သည်ထုတ်လုပ်ထားသောစာသားကိုပြန်ပို့ရန်ဖြစ်သည်။
အဆင့် ၂: LLM inference logic ကိုထည့်ပါ
သင်ရွေးချယ်ထားသော LLM မော်ဒယ်ပေါ်မူတည်၍ သက်ဆိုင်ရာ inference logic ကိုထည့်ပါ။ ဤတွင် OpenAI API ကိုအသုံးပြုခြင်းကို ဥပမာအဖြစ်ပြပါမည်-
import openai
import os
# OpenAI API key ကိုရယူပါ
openai.api_key = os.environ.get("OPENAI_API_KEY") # environment variable ကိုအသုံးပြုရန်အကြံပြုသည်
```@app.post("/generate", response_model=OutputText)
async def generate_text(input_text: InputText):
"""
Generates text based on the input text using OpenAI.
"""
try:
response = openai.Completion.create(
engine="text-davinci-003", # မော်ဒယ်ကိုရွေးချယ်ပါ
prompt=input_text.text,
max_tokens=150,
n=1,
stop=None,
temperature=0.7,
)
generated_text = response.choices[0].text.strip()
return OutputText(generated_text=generated_text)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
ဒီကုဒ်အပိုင်းက /generate လမ်းကြောင်းကိုသတ်မှတ်ပေးထားပါတယ်။ Input အနေနဲ့ InputText object ကိုလက်ခံပြီး OpenAI API ကိုသုံးပြီး စာသားကိုထုတ်ပေးပါတယ်။ ထုတ်ပေးထားတဲ့စာသားကို OutputText object အနေနဲ့ပြန်ပို့ပေးပါတယ်။ text-davinci-003 ကို သင်ရွေးချယ်ထားတဲ့ သင့်တော်တဲ့မော်ဒယ်နဲ့အစားထိုးဖို့သတိပြုပါ။
TinyLlama စတဲ့ local မော်ဒယ်တွေကိုသုံးမယ်ဆိုရင် transformers စတဲ့သက်ဆိုင်ရာ library တွေကိုထည့်သွင်းပြီး မော်ဒယ်ကို memory ထဲကို load လုပ်ဖို့လိုပါတယ်။ ကုဒ်ဥပမာကိုအောက်မှာဖော်ပြထားပါတယ်။
from transformers import pipeline
import torch
generator = pipeline('text-generation', model="TinyLlama/TinyLlama-1.1B-Chat-v1.0", torch_dtype=torch.bfloat16, device_map="auto")
@app.post("/generate", response_model=OutputText)
async def generate_text(input_text: InputText):
"""
Generates text based on the input text using TinyLlama.
"""
try:
generated_text = generator(input_text.text, max_length=50, do_sample=True, temperature=0.7)[0]['generated_text']
return OutputText(generated_text=generated_text)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
အဆင့် ၃: FastAPI application ကို run ပါ
Uvicorn ကိုသုံးပြီး FastAPI application ကို run ပါ:
uvicorn main:app --reload
```ဒါက local server တစ်ခုကို စတင်ပေးမှာဖြစ်ပြီး browser ထဲမှာ `http://127.0.0.1:8000/docs` ကို ဝင်ရောက်ပြီး အလိုအလျောက်ထုတ်ပေးထားတဲ့ API documentation ကို ကြည့်ရှုနိုင်ပါတယ်။ `--reload` parameter က code ပြောင်းလဲပြီးနောက် server ကို အလိုအလျောက် ပြန်လည်စတင်ပေးနိုင်တာကြောင့် development အတွက် အဆင်ပြေပါတယ်။
## အဆင့် ၄: API ကို စမ်းသပ်ခြင်း
API documentation ဒါမှမဟုတ် curl စတဲ့ tools တွေကို အသုံးပြုပြီး API ကို စမ်းသပ်ပါ။ ဥပမာ curl ကို အသုံးပြုပြီး POST request တစ်ခု ပို့ပါ:
```bash
curl -X POST -H "Content-Type: application/json" -d '{"text": "Tell me a joke about cats."}' http://127.0.0.1:8000/generate
ထုတ်လုပ်ထားတဲ့ စာသားပါဝင်တဲ့ JSON response တစ်ခုကို သင်ရရှိသင့်ပါတယ်။
အဆင့် ၅: ထုတ်လုပ်မှုအတွက် တပ်ဆင်ခြင်း
FastAPI application ကို ထုတ်လုပ်မှုပတ်ဝန်းကျင်မှာ တပ်ဆင်ပါ၊ ဥပမာ:
- Docker: Docker ကို အသုံးပြုပြီး သင့် application ကို containerize လုပ်ခြင်းက တပ်ဆင်ခြင်းနဲ့ စီမံခန့်ခွဲခြင်းအတွက် အဆင်ပြေစေပါတယ်။
- Cloud platform: AWS, Google Cloud Platform သို့မဟုတ် Azure စတဲ့ cloud platform တွေမှာ တပ်ဆင်ပါ။ စာထဲမှာ ဖော်ပြထားတဲ့ Azure Cosmos DB နဲ့ Azure Functions တွေကို serverless API တည်ဆောက်ဖို့ အသုံးပြုနိုင်ပါတယ်။ Modal ကိုလည်း အလိုအလျောက် တိုးချဲ့နိုင်တဲ့ FastAPI application တွေကို တပ်ဆင်ဖို့ အသုံးပြုနိုင်ပါတယ်။
- Server: ကိုယ်ပိုင် server မှာ တပ်ဆင်ပါ။
အကောင်းဆုံး အလေ့အကျင့်များ
- လျှို့ဝှက်အချက်အလက်တွေကို သိမ်းဆည်းဖို့ environment variables တွေကို အသုံးပြုပါ: API key စတဲ့ လျှို့ဝှက်အချက်အလက်တွေကို code ထဲမှာ hardcode မလုပ်ပါနဲ့၊ environment variables တွေကို အသုံးပြုပါ။
- Log မှတ်တမ်းထည့်ပါ: API ရဲ့ လည်ပတ်မှုအခြေအနေကို မှတ်တမ်းတင်ဖို့ log မှတ်တမ်း module ကို အသုံးပြုပါ။ ဒါက debug လုပ်ဖို့နဲ့ စောင့်ကြည့်ဖို့ အဆင်ပြေပါတယ်။
- Error ကိုင်တွယ်ခြင်း ထည့်ပါ: ဖြစ်နိုင်တဲ့ exceptions တွေကို ကိုင်တွယ်ဖို့
try...exceptblock ကို အသုံးပြုပြီး သင့်လျော်တဲ့ error message တွေကို ပြန်ပို့ပါ။ - နှုန်းထားကန့်သတ်ခြင်း: API ကို အလွဲသုံးစားလုပ်ခြင်းမှ ကာကွယ်ဖို့ နှုန်းထားကန့်သတ်စက်ကို အသုံးပြုပါ။ FastAPI မှာ အသုံးပြုနိုင်တဲ့ နှုန်းထားကန့်သတ် library တွေ ရှိပါတယ်။
- Cache: ထပ်တလဲလဲ တောင်းဆိုမှုတွေအတွက် performance ကို မြှင့်တင်ဖို့ cache ကို အသုံးပြုနိုင်ပါတယ်။
- စောင့်ကြည့်ခြင်း: API ရဲ့ performance နဲ့ ရရှိနိုင်မှုကို စောင့်ကြည့်ဖို့ စောင့်ကြည့်ရေးကိရိယာတွေကို အသုံးပြုပါ။
အဆင့်မြင့် နည်းစနစ်များ
- Async processing: ကြာမြင့်ချိန်ကြာတဲ့ LLM 추론 အတွက်
asyncနဲ့awaitkeywords တွေကို အသုံးပြုပြီး async processing လုပ်ခြင်းက main thread ကို ပိတ်ဆို့ခြင်းမှ ရှောင်ရှားနိုင်ပါတယ်။ - Streaming response: StreamingResponse ကို အသုံးပြုပြီး ထုတ်လုပ်ထားတဲ့ စာသားကို real-time ပြန်ပို့ခြင်းက user experience ကို မြှင့်တင်ပေးနိုင်ပါတယ်။
- Multithreading/Multiprocessing: CPU အသုံးပြုမှုများတဲ့ LLM 추론 အတွက် performance ကို မြှင့်တင်ဖို့ multithreading ဒါမှမဟုတ် multiprocessing ကို အသုံးပြုနိုင်ပါတယ်။
- GPU acceleration: သင့် LLM model က GPU acceleration ကို ထောက်ပံ့ပေးတယ်ဆိုရင် 추론 အရှိန်ကို မြှင့်တင်ဖို့ CUDA ဒါမှမဟုတ် တခြား GPU acceleration library တွေကို အသုံးပြုနိုင်ပါတယ်။





