目的

本篇文章的主要目的是记录本人在学习部署本地化大模型过程中的操作步骤以及遇到的问题,供大家借鉴。另外,本次不考虑性能,只为走通流程,体验整个部署过程。

前置条件

在进行本次操作前,需要准备的东西以及环境:

  1. Mac mini ,我所使用的是2024年的Mac mini,M4芯片,16G内存,存储空间越大越好,最好有20GB以上的剩余空间(下载模型时会用到);
  2. python环境,python3.8及以上python版本;
  3. 科学上网,由于MLX是命令行工具,它的核心功能是与Hugging Face Hub集成的,如果你不知道下载哪个模型或者不知道有哪些模型可以下载,就需要访问Hugging Face平台,此时就需要科学上网了,如果知道要下载的大模型名称,则可以忽略此步;

操作步骤

1、准备环境

1.1、安装 Homebrew(若已安装则忽略此步)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

1.2、创建虚拟环境

# 创建项目目录
mkdir ml-models && cd ml-models

# 创建虚拟环境
python3 -m venv ml_env

# 激活虚拟环境
source ml_env/bin/activate

1.3、安装mlx

pip3 install mlx-lm

2、下载大模型

python3 -m mlx_lm.generate --model mlx-community/Qwen2.5-7B-Instruct-4bit --prompt "你好"

此时会先下载Qwen2.5-7B-Instruct-4bit大模型,下载完成后,运行该大模型。

可以通过访问 Hugging Face 的 mlx-community 页面来浏览所有可用的模型(科学上网):MLX可用模型

可以通过一个简单的公式来估算模型运行时的大致内存占用(参考):

估算公式:实际占用内存 ≈ 模型参数量 × 量化字节数
4bit 量化 = 0.5 字节
8bit 量化 = 1 字节
fp16 (半精度) = 2 字节

举例计算:
一个 7B 参数的模型,使用 4bit 量化,其内存占用约为:
7 (B) × 0.5 (字节) ≈ 3.5 GB

Mac 统一内存 推荐模型配置 估算内存占用
8GB 3B 及以下 (4bit) ~2GB
16GB 7B-8B (4bit) ~4-5GB
32GB 14B (4bit) 或 7B (8bit/fp16) ~8GB 或 ~14GB
48GB+ 32B-70B (4bit) ~16GB - 35GB

3、大模型首秀

from mlx_lm import load, generate
from mlx_lm.sample_utils import make_sampler

class LocalLLM:
    def __init__(self, model_name="/Users/{要修改的值}/.cache/huggingface/hub/models--mlx-community--Qwen2.5-7B-Instruct-4bit"):
        """
        初始化本地大语言模型,使用 mlx-lm 库
        """
        self.model_name = model_name

        print(f"正在加载模型: {model_name}")

        self.model, self.tokenizer = load(model_name)

        print("模型加载完成!")

    def generate_response(self, input_text, max_length=200, temperature=0.7):
        """
        生成响应
        """
        sampler = make_sampler(temp=temperature)

        response = generate(
            self.model,
            self.tokenizer,
            prompt=input_text,
            max_tokens=max_length,
            sampler=sampler,
        )

        return response

    def chat(self, input_text, max_length=200, temperature=0.7):
        """
        对话接口
        """
        return self.generate_response(input_text, max_length, temperature)


def main():
    print("=== 大模型本地化部署开始 ===")

    available_models = [
        "mlx-community/Qwen2.5-7B-Instruct-4bit",
        "mlx-community/Llama-3.2-3B-Instruct-4bit",
        "mlx-community/Qwen2.5-1.5B-Instruct-4bit",
    ]

    print("可用模型:")
    for i, model in enumerate(available_models):
        print(f"{i+1}. {model}")

    selected_model = "mlx-community/Qwen2.5-7B-Instruct-4bit"
    print(f"\n选择模型: {selected_model}")

    try:
        llm = LocalLLM(selected_model)

        print("\n=== 模型部署成功 ===")
        print("输入 'quit' 退出对话")

        while True:
            user_input = input("\n您: ")
            if user_input.lower() == 'quit':
                break

            response = llm.chat(user_input, max_length=100)
            print(f"AI: {response}")

    except Exception as e:
        print(f"错误: {e}")


if __name__ == "__main__":
    main()

运行脚本,开始运行本地大模型。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐