# 创建虚拟环境(可选)
conda create -n openelm python=3.10
conda activate openelm
# 安装 PyTorch(根据硬件选择)
# CPU 版本
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
# GPU 版本(示例:CUDA 12.1)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# 安装 OpenELM 依赖
pip install transformers accelerate sentencepieceOpenELM 已上传至 Hugging Face Hub,可直接加载:
苹果提供了多个版本,例如:
apple/OpenELM-0.27B:最小版本,适合边缘设备apple/OpenELM-1.1B:平衡版本apple/OpenELM-3B:中等规模apple/OpenELM-7B:较大版本(需更多资源)from transformers import AutoModelForCausalLM, AutoTokenizer
# 选择模型(可替换为其他版本)
model_name = "apple/OpenELM-1.1B"
# 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto", # 自动选择精度(FP32/FP16)
device_map="auto" # 自动分配设备(CPU/GPU)
)
# 推理示例
prompt = "Once upon a time,"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=50,
do_sample=True,
temperature=0.7
)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))若无法访问 Hugging Face,可手动下载模型文件:
从 OpenELM GitHub 或 Hugging Face 模型页 下载:
.safetensors 或 .bin)config.json)tokenizer.json、tokenizer_config.json 等)from transformers import AutoModelForCausalLM, AutoTokenizer
# 本地模型路径
local_model_path = "./openelm-1.1b"
# 加载模型
tokenizer = AutoTokenizer.from_pretrained(local_model_path)
model = AutoModelForCausalLM.from_pretrained(local_model_path)
# 推理(同上)若需提供 HTTP 接口,可使用 FastAPI:
pip install fastapi uvicornapi.py)from fastapi import FastAPI
from pydantic import BaseModel
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
app = FastAPI()
# 加载模型(启动时加载一次)
model_name = "apple/OpenELM-1.1B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")
class Query(BaseModel):
prompt: str
max_new_tokens: int = 50
temperature: float = 0.7
@app.post("/generate")
async def generate_text(query: Query):
inputs = tokenizer(query.prompt, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=query.max_new_tokens,
temperature=query.temperature
)
return {"response": tokenizer.decode(outputs[0], skip_special_tokens=True)}uvicorn api:app --host 0.0.0.0 --port 8000curl -X POST "http://localhost:8000/generate" \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello, how are you?"}'苹果官方支持将 OpenELM 转换为 Core ML 格式,用于 iOS/macOS 应用:
pip install coremltoolsimport coremltools as ct
from transformers import AutoModelForCausalLM, AutoTokenizer
# 加载 PyTorch 模型
model = AutoModelForCausalLM.from_pretrained("apple/OpenELM-0.27B")
tokenizer = AutoTokenizer.from_pretrained("apple/OpenELM-0.27B")
# 转换为 Core ML(需指定输入形状)
example_input = tokenizer("test", return_tensors="pt")["input_ids"]
traced_model = torch.jit.trace(model, example_input)
coreml_model = ct.convert(
traced_model,
inputs=[ct.TensorType(shape=example_input.shape)]
)
# 保存模型
coreml_model.save("OpenELM-0.27B.mlpackage").mlpackage 文件拖入 Xcode,使用 CoreML 框架调用。# 加载时启用 4-bit 量化(需安装 bitsandbytes)
model = AutoModelForCausalLM.from_pretrained(
"apple/OpenELM-1.1B",
load_in_4bit=True,
device_map="auto"
)pip install optimum[onnxruntime]from optimum.onnxruntime import ORTModelForCausalLM
# 导出为 ONNX 格式并加载
model = ORTModelForCausalLM.from_pretrained(
"apple/OpenELM-1.1B",
export=True # 自动导出为 ONNX
)sentencepiece(OpenELM 使用 SentencePiece 分词器)。根据你的具体需求选择部署方式,若有进一步问题(如特定硬件适配),可补充说明!