OpenELM 是苹果开源的小型语言模型,部署在 Linux 上可以通过多种方式实现。以下是详细的部署步骤:
# 更新系统包
sudo apt update && sudo apt upgrade -y # Ubuntu/Debian
# 或 sudo yum update -y # CentOS/RHEL
# 安装 Python 和 pip
sudo apt install python3 python3-pip python3-venv -y
# 安装 Git(如果需要从源码安装)
sudo apt install git -y根据你的硬件选择安装:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu# 查看 CUDA 版本:nvcc --version
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # CUDA 11.8
# 或 cu121 对应 CUDA 12.1pip install openelmgit clone https://github.com/apple/corenet.git
cd corenet
pip install -e .OpenELM 提供多个版本,选择适合你的模型:
| 模型版本 | 参数量 | 适用场景 |
|---|---|---|
| OpenELM-270M | 270M | 轻量级,适合测试 |
| OpenELM-450M | 450M | 平衡性能与资源 |
| OpenELM-1.1B | 1.1B | 较好性能 |
| OpenELM-3B | 3B | 最佳性能 |
from transformers import AutoModelForCausalLM, AutoTokenizer
# 选择模型(例如 270M)
model_name = "apple/OpenELM-270M-Instruct"
# 下载模型和分词器
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
def generate_text(prompt, max_length=100):
# 加载模型
model_name = "apple/OpenELM-270M-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# 如果有 GPU
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
# 编码输入
inputs = tokenizer(prompt, return_tensors="pt").to(device)
# 生成文本
with torch.no_grad():
outputs = model.generate(
**inputs,
max_length=max_length,
num_return_sequences=1,
temperature=0.7,
do_sample=True
)
# 解码输出
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
return generated_text
# 测试
if __name__ == "__main__":
prompt = "Once upon a time"
result = generate_text(prompt)
print(result)from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
# 4-bit 量化配置
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16
)
model = AutoModelForCausalLM.from_pretrained(
"apple/OpenELM-270M-Instruct",
quantization_config=quantization_config,
device_map="auto"
)pip install vllmfrom vllm import LLM, SamplingParams
# 初始化
llm = LLM(model="apple/OpenELM-270M-Instruct")
# 生成参数
sampling_params = SamplingParams(temperature=0.7, max_tokens=100)
# 生成
outputs = llm.generate(["Once upon a time"], sampling_params)
for output in outputs:
print(output.outputs[0].text)使用 FastAPI 创建简单 API:
pip install fastapi uvicornfrom fastapi import FastAPI
from pydantic import BaseModel
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
app = FastAPI()
# 加载模型(启动时加载一次)
model_name = "apple/OpenELM-270M-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
class Query(BaseModel):
prompt: str
max_length: int = 100
@app.post("/generate")
async def generate(query: Query):
inputs = tokenizer(query.prompt, return_tensors="pt").to(device)
with torch.no_grad():
outputs = model.generate(**inputs, max_length=query.max_length)
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
return {"response": result}
# 运行:uvicorn main:app --host 0.0.0.0 --port 8000device_map="auto"export HF_ENDPOINT=https://hf-mirror.compython3 -m venv openelm-env
source openelm-env/bin/activate基本部署流程:
根据你的需求选择模型大小和部署方式。对于生产环境,建议使用 vLLM 或量化技术优化性能。