31 篇文章带有标签 “MacBookProM2Max”

PyTorch 神经网络实战:从训练到推理的完整指南

该文本提供了一个关于PyTorch二分类神经网络的实现与性能分析的全面概述。首先,它通过具体代码示例展示了如何构建、训练、评估和保存一个基础的神经网络模型,并演示了如何加载模型进行推理。其次,文章深入探讨了不同模型参数规模下Apple的MPS(Metal Performance Shaders)框架与CPU训练时间上的性能对比,通过表格数据清晰地呈现了MPS在处理大型模型时相较于CPU的显著优势,并指出了性能的“转折点”

我的电脑是 Apple MacBook Pro M2 Max 16寸 64G内存

这不是好的实践,因为训练和数据加载在同一个 for 循环中顺序进行。每次我们加载下一个小批量时,模型和 GPU 都处于空闲状态。

理想情况下,我们希望模型在后向调用和参数更新(通过.step())后立即处理下一个小批量。换句话说,目标是在模型准备就绪后立即准备好下一个小批量,因此我们希望在模型训练期间持续在后台加载小批量。遗憾的是,由于 Python 有一个全局解释器锁 (GIL),默认情况下只允许它运行单个进程,因此我们必须编写一个复杂的解决方法。

值得庆幸的是,我们可以使用 PyTorch 的 DataLoader 来实现这一点。

Mac 外接显示器 DELL U2723QE

左侧 右侧
左侧 右侧
  • SDXC 卡插槽
  • HDMI 端口
  • 3.5 毫米耳机插孔
  • MagSafe 3 端口
  • 三个雷雳 4 (USB-C) 端口,均可支持:
    • 充电
    • DisplayPort
    • 雷雳 4 (速率最高可达 40Gb/s)
    • USB 4 (速率最高可达 40Gb/s)

  • 端口和插槽
    1. 安全锁插槽(基于 Kensington 安全插槽™)
    2. 电源接口
    3. HDMI 端口
    4. DisplayPort 输入端口
    5. USB-C 端口
    6. DP 端口(输出)
    7. 音频输出端口
    8. USB-C 上行端口
    9. 3 个超高速 USB 10 Gbps 端口(第二代 USB 3.2
    10. 超高速 USB 10 Gbps 端口(第二代 USB 3.2)
    11. RJ45 端口
    12. 超高速 USB 10 Gbps 端口(第二代 USB 3.2)
    13. USB-C 下行端口
  • 随附线缆
    1. 电源线
    2. DisplayPort 1.8 米线缆(DisplayPort 到 DisplayPort)
    3. 第二代 USB-C 1.0 米线缆(A 到 C)
    4. Type-C 1.0 米线缆(C-C 线缆)

Dell Display and Peripheral Manager (DDPM) 是一款可提高 macOS 上戴尔显示器和网络摄像头的工作效率和自定义功能的软件。

Dell Display Manager 2.

Mac 外接显示器选购

XDR (极致动态范围)

  • 1000000:1 对比度
  • XDR 亮度:1000 尼特持续亮度 (全屏),1600 尼特峰值亮度2 (仅限 HDR 内容)
  • SDR 亮度:500 尼特

色彩

  • 10 亿色彩
  • 广色域 (P3)
  • 原彩显示技术

刷新率

  • ProMotion 自适应刷新率技术,最高可达 120Hz
  • 固定刷新率:47.95Hz、48.00Hz、50.00Hz、59.94Hz、60.00Hz

左侧

左侧

右侧

右侧

  • SDXC 卡插槽
  • HDMI 端口
  • 3.5 毫米耳机插孔
  • MagSafe 3 端口
  • 三个雷雳 4 (USB-C) 端口,均可支持:
    • 充电
    • DisplayPort
    • 雷雳 4 (速率最高可达 40Gb/s)
    • USB 4 (速率最高可达 40Gb/s)

雷雳 4 数字视频输出

  • 支持通过 USB‑C 进行原生 DisplayPort 输出

HDMI 数字视频输出

  • 支持一台分辨率最高达 8K (60Hz) 或 4K (240Hz) 的显示器
  • TN
  • VA/HVA
  • OLED
    • QD-OLED
    • Mini LED
  • IPS
    • Nano IPS
    • Fast IPS
    • IPS Black

HDR 是High Dynamic Range的缩写,即高动态范围。它指的是图像中最亮部分和最暗部分之间的亮度差。HDR技术可以让我们看到更接近人眼看到的真实世界,画面更具层次感。

HDR400 技术认证拉宽暗部和高光之间的空间容量,提升高度上限,明暗部

在 MLX 上使用 LoRA / QLoRA 微调 Text2SQL(八):使用 LoRA 基于 TinyLlama 微调

  • 输入
<|system|>
You are a chatbot who can help code!</s>
<|user|>
Write me a function to calculate the first 10 digits of the fibonacci sequence in Python and print it out to the CLI.</s>
<|assistant|>
  • 输出
[
  {
    "generated_text": "<|system|>\nYou are a chatbot who can help code!</s>\n<|user|>\nWrite me a function to calculate the first 10 digits of the fibonacci sequence in Python and print it out to the CLI.</s>\n<|assistant|>\nHere's a Python function that calculates the first 10 digits of the Fib"
  }
]
  • 生成

在 MLX 上使用 LoRA / QLoRA 微调 Text2SQL(七):MLX 微调的模型转换为 GGUF 模型

将 MLX 微调的模型转换为 GGUF 模型最大的意义是可以融入 GGUF 的生态系统,可以在更多的平台上使用。

修改脚本 mlx-examples/lora/data/wikisql.py

if __name__ == "__main__":
    # ......
    for dataset, name, size in datasets:
        with open(f"data/{name}.jsonl", "w") as fid:
            for e, t in zip(range(size), dataset):
                t = t[3:]
                json.dump({"text": t}, fid)
                fid.write("\n")

执行脚本 data/wikisql.py 生成数据集。

data/wikisql.py
pip install mlx-lm

在 MLX 上使用 LoRA / QLoRA 微调 Text2SQL(五):对比使用 LoRA 和 QLoRA 基于 Mistral-7B 微调的效果

Iteration LoRA Train Loss LoRA Val Loss LoRA Tokens/sec QLoRA Train Loss QLoRA Val Loss QLoRA Tokens/sec
1 2.343 2.420
100 1.204 221.348 1.216 166.377
200 1.091 1.111 207.353 1.095 1.130 187.795
300 0.818 234.182 1.065 194.826
400 0.837 1.076 207.763 0.998 1.006 170.072
500 0.774 223.036 0.726 189.288
600 0.609 1.001 218.118 0.607 1.015 186.397

计算测试集困惑度(PPL)和交叉熵损失(Loss)。

Iteration LoRA Test Loss LoRA Test PPL QLoRA Test Loss QLoRA Test PPL
600 1.351 3.863 1.396 4.040
Prompt: table: students
columns: Name, Age, School, Grade, Height, Weight
Q: What is Wang Junjian's name?
A: 

在 MLX 上使用 LoRA / QLoRA 微调 Text2SQL(四):使用 QLoRA 基于 Mistral-7B 微调

QLoRA 微调需要量化,生成 4 位量化的 Mistral 7B 并默认将其存储在 mlx_model 目录中

python convert.py --hf-path mistralai/Mistral-7B-v0.1 -q

mlx_model 目录结构如下:

mlx_model
├── config.json
├── model.safetensors
├── special_tokens_map.json
├── tokenizer.json
├── tokenizer.model
├── tokenizer_config.json
└── weights.00.safetensors

量化后的模型 8.0G

在 MLX 上使用 LoRA / QLoRA 微调 Text2SQL(二):使用 LoRA 基于 Mistral-7B 微调

本次微调的模型我已经上传到了 HuggingFace Hub 上,大家可以进行尝试。

pip install mlx-lm

📌 没有使用模型的标注格式生成数据集,导致不能结束,直到生成最大的 Tokens 数量。

这次我们来解决这个问题。

执行脚本 data/wikisql.py 生成数据集。

table: 1-10753917-1
columns: Season, Driver, Team, Engine, Poles, Wins, Podiums, Points, Margin of defeat
Q: Which podiums did the alfa romeo team have?
A: SELECT Podiums FROM 1-10753917-1 WHERE Team = 'Alfa Romeo'</s>

在 MLX 上使用 LoRA / QLoRA 微调 Text2SQL(一):使用 LoRA 基于 Mistral-7B 微调

git clone https://github.com/ml-explore/mlx-examples.git
cd mlx-examples/lora

pip install -r requirements.txt
pip install huggingface_hub hf_transfer

export HF_HUB_ENABLE_HF_TRANSFER=1
huggingface-cli download \
    --local-dir-use-symlinks False \
    --local-dir mistralai/Mistral-7B-v0.1 \
    mistralai/Mistral-7B-v0.1

在 MacBook Pro M2 Max 上安装 FastChat

FastChat 是一个开放平台,用于训练、服务和评估基于大型语言模型的聊天机器人。

mkdir deepseek-ai
ln -s /Users/junjian/HuggingFace/deepseek-ai/deepseek-llm-7b-chat deepseek-ai/deepseek-llm-7b-chat
ln -s /Users/junjian/HuggingFace/deepseek-ai/deepseek-coder-1.3b-instruct deepseek-ai/deepseek-coder-1.3b-instruct
mkdir THUDM
ln -s /Users/junjian/HuggingFace/THUDM/chatglm3-6b THUDM/chatglm3-6b
  • deepseek-ai/deepseek-llm-7b-chat
python -m fastchat.serve.model_worker \
    --model-path deepseek-ai/deepseek-llm-7b-chat --port 21002 \
    --worker-address http://localhost:21002 \
    --device mps

whisper.cpp

models/generate-coreml-model.sh large-v3 --encoder-only True
time ./main -m models/ggml-large-v3.bin -f test.wav -l auto 
Neon & MPS 👍 CoreML 🚀 (47%)
load time 1007.19 ms 859.73 ms
mel time 216.87 ms 224.71 ms
sample time 3550.35 ms 2659.66 ms
encode time 7821.69 ms 5801.61 ms
decode time 2958.22 ms 4105.18 ms
batchd time 88241.95 ms 54016.19 ms
prompt time 1618.32 ms 1218.58 ms
total time 105432.62 ms 71318.02 ms
cpu time 1:45.50 1:11.44

速度提高了,但效果下降了。

Qwen (通义千问)

  • 命令行聊天
python cli_demo.py
  • Web 聊天
python web_demo.py
  • Model Worker
python -m fastchat.serve.model_worker \
    --model-path Qwen/Qwen-1_8B-Chat --port 21002 \
    --worker-address http://localhost:21002 \
    --device mps
  • OpenAI API Server
python -m fastchat.serve.openai_api_server --port 8000
  • Web Server
python -m fastchat.serve.gradio_web_server --host 0.0.0.0 --port 8001

使用 Web 聊天的时候出现乱码,感觉 ChatML 格式的问题。

MLX LLMS Examples

转换模型

cd llms/phi2
python convert.py

生成的模型存放在 mlx_model 文件夹下。

ll mlx_model
-rw-r--r--  1 junjian  staff    28B 12 25 10:47 config.json
-rw-r--r--  1 junjian  staff   5.2G 12 25 10:47 weights.npz

模型推理

SeamlessM4T — Massively Multilingual & Multimodal Machine Translation(大规模多语言和多模式机器翻译)

Seamless Communication

  • ASR: Automatic speech recognition for 96 languages.
  • S2ST: Speech-to-Speech translation from 100 source speech languages into 35 target speech languages.
  • S2TT: Speech-to-text translation from 100 source speech languages into 95 target text languages.
  • T2ST: Text-to-Speech translation from 95 source text languages into 35 target speech languages.
  • T2TT: Text-to-text translation (MT) from 95 source text languages into 95 target text languages.
conda create -n seamless-m4t python==3.10.9 -y
conda activate seamless-m4t

cli/m4t/predict/predict.py

macOS 能连上 WiFi 但无法上网

打开访达,按下Command + Shift + G,输入/Library/Preferences/SystemConfiguration/,除com.apple.Boot.plist文件外,删除其他所有文件,然后重启电脑。

在 MacBook Pro M2 Max 上测试 ChatGLM2-6B

  1. 更强大的性能:基于 ChatGLM 初代模型的开发经验,我们全面升级了 ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了 GLM 的混合目标函数,经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,评测结果显示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等数据集上的性能取得了大幅度的提升,在同尺寸开源模型中具有较强的竞争力。
  2. 更长的上下文:基于 FlashAttention 技术,我们将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练,允许更多轮次的对话。但当前版本的 ChatGLM2-6B 对单轮超长文档的理解能力有限,我们会在后续迭代升级中着重进行优化。
  3. 更高效的推理:基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。