OpenELM 是苹果公司开源的小型语言模型(SLM)系列,离线部署的核心是将模型权重、推理代码及依赖环境部署到本地设备,无需联网即可运行。以下是详细的离线部署步骤,涵盖环境准备、模型获取、本地推理配置三个关键环节,适用于 macOS、Linux 或 Windows 系统(推荐 macOS 以利用苹果芯片优化)。
离线部署的前提是在有网络的设备上准备好所有依赖和模型文件,再转移到离线设备。若离线设备本身可临时联网(如内网),也可直接操作。
pip 或 conda(建议用 conda 隔离环境)。先在有网络的设备上创建虚拟环境并安装依赖,再将环境打包转移到离线设备(或直接下载依赖的 wheel 包离线安装)。
# 用 conda
conda create -n openelm python=3.10
conda activate openelm
# 或用 venv
python -m venv openelm-env
source openelm-env/bin/activate # Linux/macOS
openelm-env\Scripts\activate # WindowsOpenELM 官方依赖包括 torch、transformers、safetensors 等,需提前安装:
# 安装 PyTorch(根据硬件选择版本,苹果芯片选 CPU 版本即可,或用 MPS 加速)
# 苹果芯片/MPS:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu # 或官方 MPS 版本
# x86 CPU:
pip install torch --index-url https://download.pytorch.org/whl/cpu
# NVIDIA GPU(需 CUDA 11.8+):
pip install torch --index-url https://download.pytorch.org/whl/cu118
# 安装 transformers(Hugging Face 模型加载库)
pip install transformers safetensors accelerate若离线设备无法联网,需在有网络的设备上导出依赖包,再转移到离线设备安装:
# 导出依赖列表
pip freeze > requirements.txt
# 下载所有依赖的 wheel 包到本地文件夹(如 ./offline_pkgs)
pip download -r requirements.txt -d ./offline_pkgs
# 将 ./offline_pkgs 和 requirements.txt 转移到离线设备,然后安装:
pip install --no-index --find-links=./offline_pkgs -r requirements.txtOpenELM 模型托管在 Hugging Face Hub,需提前下载模型权重和配置文件到本地,再转移到离线设备。
OpenELM 提供多个规模版本,根据硬件选择(离线部署推荐小模型更易运行):
openelm-270m(2.7 亿参数,轻量)openelm-450m(4.5 亿参数)openelm-1_1b(11 亿参数)openelm-3b(30 亿参数)完整列表见 Hugging Face OpenELM 仓库。
用 huggingface_hub 库或手动下载模型文件:
huggingface_hub 下载(推荐)# 安装 huggingface_hub
pip install huggingface_hub
# 下载指定模型(以 openelm-270m 为例,保存到 ./openelm-270m 文件夹)
from huggingface_hub import snapshot_download
snapshot_download(repo_id="apple/OpenELM-270M", local_dir="./openelm-270m", local_dir_use_symlinks=False)下载完成后,./openelm-270m 文件夹会包含:
model.safetensors(或 pytorch_model.bin)config.json、tokenizer.json、tokenizer_config.json 等访问 OpenELM-270M Hugging Face 页面,点击右上角 ↓ Clone repository,或用浏览器下载所有文件到本地,再转移到离线设备。
将下载好的模型文件夹(如 openelm-270m)通过 U 盘、内网传输等方式复制到离线设备的目标路径(如 ~/offline_models/openelm-270m)。
在离线设备上,通过 Python 代码加载本地模型,实现离线推理。以下是两种常用方式:
OpenELM 已适配 Hugging Face transformers,直接加载本地文件夹即可:
from transformers import AutoModelForCausalLM, AutoTokenizer
# 本地模型路径(替换为你的模型文件夹路径)
model_path = "~/offline_models/openelm-270m" # 如 "./openelm-270m"
# 加载分词器和模型(离线模式,不联网)
tokenizer = AutoTokenizer.from_pretrained(model_path, local_files_only=True)
model = AutoModelForCausalLM.from_pretrained(model_path, local_files_only=True)
# 推理示例
prompt = "Once upon a time,"
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))关键参数:local_files_only=True 确保不联网检查 Hugging Face Hub。
若离线设备是苹果 M 系列芯片,可将模型转换为 Core ML 格式,获得更快推理速度(需提前在有网络的设备上转换,再转移到离线设备)。
pip install coremltoolsfrom transformers import AutoModelForCausalLM, AutoTokenizer
import coremltools as ct
# 加载本地 PyTorch 模型
model_path = "./openelm-270m"
tokenizer = AutoTokenizer.from_pretrained(model_path, local_files_only=True)
model = AutoModelForCausalLM.from_pretrained(model_path, local_files_only=True)
# 转换为 Core ML(指定输入形状,如 batch=1, seq_len=128)
example_input = tokenizer("Hello, world!", return_tensors="pt")
traced_model = torch.jit.trace(model, example_input["input_ids"])
coreml_model = ct.convert(
traced_model,
inputs=[ct.TensorType(shape=example_input["input_ids"].shape)],
outputs=[ct.TensorType(name="output")]
)
# 保存 Core ML 模型(如 openelm-270m.mlpackage)
coreml_model.save("openelm-270m.mlpackage")import coremltools as ct
# 加载本地 Core ML 模型
model = ct.models.MLModel("openelm-270m.mlpackage")
# 推理(需配合 tokenizer 处理文本)
prompt = "Once upon a time,"
inputs = tokenizer(prompt, return_tensors="pt")
# 转换为 Core ML 输入格式(需对齐转换时的输入形状)
coreml_input = {"input_ids": inputs["input_ids"].numpy()}
output = model.predict(coreml_input)
print(tokenizer.decode(output["output"][0], skip_special_tokens=True))local_dir 或 model_path 指向包含 config.json 和 model.safetensors 的文件夹。torch、transformers),可通过 pip list 检查。model.to("mps"));torch>=2.0.0)。OpenELM 离线部署的核心流程是:联网准备环境→下载模型到本地→转移到离线设备→本地加载推理。关键是利用 local_files_only=True 避免联网,苹果芯片用户可通过 Core ML 进一步优化性能。按上述步骤操作,即可在无网络环境下运行 OpenELM 模型。