---
# System prepended metadata

title: LLM Assistant
tags: [Project]

---

# LLM Assistant


## 1. 安裝必要的工具和套件

先設置開發環境並安裝相關的 Python 套件。

安裝指令

```bash=
# 建立虛擬環境
python3 -m venv llm-env
source llm-env/bin/activate

# 安裝 Transformers 和 PyTorch
pip install torch torchvision transformers accelerate
```

## 2. 選擇模型

Hugging Face 提供以下模型可以模擬 GPT-3 的功能：
- GPT-Neo：EleutherAI/gpt-neo-2.7B
- GPT-J：EleutherAI/gpt-j-6B
- GPT-NeoX：EleutherAI/gpt-neox-20b

這裡以 GPT-J 為例，因為它的性能接近 GPT-3，且能夠在本地端執行。

## 3. 加載模型與執行

範例代碼

```python=
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

# 模型名稱：GPT-J
model_name = "EleutherAI/gpt-j-6B"

# 載入 Tokenizer 和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")

# 測試輸入文字
input_text = "今天的天氣如何？"

# 將輸入編碼
inputs = tokenizer(input_text, return_tensors="pt").to("cuda")

# 模型生成
outputs = model.generate(
    inputs["input_ids"],
    max_length=50,
    do_sample=True,
    top_k=50,
    temperature=0.7
)

# 解碼輸出
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
```

## 4. 進一步優化模型

如果運行效率不夠高，可以考慮以下方式：

使用 8-bit 量化

降低模型運算需求，適合資源有限的環境。

pip install bitsandbytes

修改代碼：

```python=
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
    load_in_8bit=True
)
```

使用 Accelerate

讓 Hugging Face 的 Accelerate 自動優化硬體資源。

```bash=
pip install accelerate
```

初始化加速器：

```python=
from accelerate import init_empty_weights

with init_empty_weights():
    model = AutoModelForCausalLM.from_pretrained(model_name)
```

## 5. 部署模型為 API

使用 FastAPI 快速構建一個 API。

安裝 FastAPI 和 Uvicorn

```bash=
pip install fastapi uvicorn
```

API 代碼

儲存為 app.py：

```python=
from fastapi import FastAPI
from transformers import AutoTokenizer, AutoModelForCausalLM

app = FastAPI()

# 加載模型
model_name = "EleutherAI/gpt-j-6B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")

@app.post("/generate/")
async def generate_text(prompt: str):
    inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
    outputs = model.generate(inputs["input_ids"], max_length=50, do_sample=True, top_k=50, temperature=0.7)
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return {"response": response}
```

運行 API

```bash=
uvicorn app:app --host 0.0.0.0 --port 8000
```

在瀏覽器或 Postman 中測試：

```bash=
POST http://localhost:8000/generate/
{
  "prompt": "請幫我生成一段中文文字"
}
```

## 6. 注意事項
1.	硬體需求：GPT-J 需要 GPU 加速，否則運行會非常緩慢。
2.	模型大小：GPT-J（6B參數）需要超過 16GB 的 GPU 顯存。若無法滿足，可以嘗試更小的模型，如 GPT-Neo。
3.	法律合規：部分模型可能有使用限制，務必確認授權條款。

