在 MLX 上使用 LoRA / QLoRA 微调 Text2SQL(六):使用 LoRA 基于 Deepseek-Coder-7B 微调

大模型 Deepseek-Coder-7B

数据集 WikiSQL

修改脚本 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): # deepseek-ai/deepseek-coder-7b-instruct-v1.5 # 去掉开头的 <|begin▁of▁sentence|>,因为 tokenizer 会自动添加 <|begin▁of▁sentence|> t = t[3:-4] + "<|end▁of▁sentence|>" json.dump({"text": t}, fid) fid.

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

使用 LoRA 和 QLoRA 基于 Mistral-7B 微调的实验

LoRA 和 QLoRA 对比

微调

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

微调的参数量 LoRA 微调万分之 2.35 (1.704M / 7243.436M * 10000)的模型参数。 QLoRA 微调万分之 13.

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

预训练模型 mistralai/Mistral-7B-v0.1

量化

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

微调

QLoRA 微调

在 MLX 上使用 LoRA / QLoRA 微调 Text2SQL(三):分享微调后的模型到 HuggingFace Hub

mlx-community/Mistral-7B-v0.1-LoRA-Text2SQL

安装 mlx-lm

pip install mlx-lm

生成 SQL

python -m mlx_lm.generate --model mlx-community/Mistral-7B-v0.1-LoRA-Text2SQL \
                          --max-tokens 50 \
                          --prompt "table: students
columns: Name, Age, School, Grade, Height, Weight
Q: Which school did Wang Junjian come from?
A: "
SELECT School FROM Students WHERE Name = 'Wang Junjian'

上传模型到 HuggingFace Hub

  1. 加入 MLX Community 组织
  1. 在 MLX Community 组织中创建一个新的模型 mlx-community/Mistral-7B-v0.1-LoRA-Text2SQL
  1. 克隆仓库 mlx-community/Mistral-7B-v0.1-LoRA-Text2SQL

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

mlx-community/Mistral-7B-v0.1-LoRA-Text2SQL

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

安装 mlx-lm

pip install mlx-lm

生成 SQL

python -m mlx_lm.generate --model mlx-community/Mistral-7B-v0.1-LoRA-Text2SQL \
                          --max-tokens 50 \
                          --prompt "table: students
columns: Name, Age, School, Grade, Height, Weight
Q: Which school did Wang Junjian come from?
A: "
SELECT School FROM Students WHERE Name = 'Wang Junjian'

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

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

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

数据集 WikiSQL

修改脚本 mlx-examples/lora/data/w

在 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

数据集 WikiSQL

样本格式

UnitMesh: AI 赋能软件研发全流程

UnitMesh

AutoDev - AI 辅助编程

AutoDev 是一款基于 JetBrains IDE 的 AI 辅助编程插件。AutoDev 能够与您的需求管理系统(例如Jira、Trello、Github Issue 等) 直接对接。在 IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。您所需做的,仅仅是对生成的代码进行质量检查。

UnitMinions - 《AI 研发提效研究:自己动手训练 LoRA》

Chocolate Factory - AI 开发框架

Chocolate Factory 是一款开源的 LLM 应用开发框架,旨在帮助您轻松打造强大的软件开发 SDLC + LLM 生成助手。

Studio B3 - 辅助需求编程器

Studio B3 是一个为内容创作设计的 AI 编辑器,适用于各种格式,如博客、文章、用户故事等。

UnitGen - 研发模型微调 UnitGen 是一个用于生成微调代码的数据框架 —— 直接从你的代码

使用 llama.cpp 构建兼容 OpenAI API 服务

[llama.cpp][llama.cpp]

模型量化 量化类型 ./quantize --help Allowed quantization types: 2 or Q4_0 : 3.56G, +0.2166 ppl @ LLaMA-v1-7B 3 or Q4_1 : 3.90G, +0.1585 ppl @ LLaMA-v1-7B 8 or Q5_0 : 4.33G, +0.0683 ppl @ LLaMA-v1-7B 9 or Q5_1 : 4.70G, +0.0349 ppl @ LLaMA-v1-7B 19 or IQ2_XXS : 2.06 bpw quantization 20 or IQ2_XS : 2.31 bpw quantization 10 or Q2_K : 2.63G, +0.6717 ppl @ LLaMA-v1-7B 21 or Q2_K_S : 2.16G, +9.0634 ppl @ LLaMA-v1-7B 12 or Q3_K : alias for Q3_K_M 11 or Q3_K_S : 2.75G, +0.5551 ppl @ LLaMA-v1-7B 12 or Q3_K_M : 3.07G, +0.2496 ppl @ LLaMA-v1-7B 13 or Q3_K_L : 3.35G, +0.

git 配置代理

我使用 v2ray 科学上网,并且已经开启了全局模式,所有网络连接都应该通过 v2ray 的代理服务器。但我使用 git 命令行应用发现不能连接 GitHub,但 GitHub Desktop 可以正常使用。

git clone https://github.com/wang-junjian/chatbox
Cloning into 'chatbox'...
fatal: unable to access 'https://github.com/wang-junjian/chatbox/': Failed to connect to github.com port 443 after 75011 ms: Couldn't connect to server

在这种情况下,你需要手动为 git 设置代理。

设置代理

git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

这些命令将 git 的 HTTP 和 HTTPS 代理设置为 socks5://127.0.0.1:1080。你需要将 1080 替换为你的 v2ray 服务的端口。

LLM 的基准测试

安装 FastChat & vLLM

安装 FastChat

安装 FlashAttention

FlashAttention-2 currently supports:

  • Ampere, Ada, or Hopper GPUs (e.g., A100, RTX 3090, RTX 4090, H100). Support for Turing GPUs (T4, RTX 2080) is coming soon, please use FlashAttention 1.x for Turing GPUs for now.
  • Datatype fp16 and bf16 (bf16 requires Ampere, Ada, or Hopper GPUs).
  • All head dimensions up to 256. Head dim > 192 backward requires A100/A800 or H100/H800.

Turing GPU T4 不支持,需要使用 FlashAttention 1.x,否则会报错 ❌:

使用 FastChat 在 CUDA 上部署 LLM

安装 FastChat & vLLM

安装 FastChat

pip install "fschat[model_worker,webui]"

安装 FlashAttention

  • Turing GPU T4 不支持 FlashAttention 2,需要使用 FlashAttention 1.x 。
  • Turing GPU T4 不支持 bf16,需要使用 fp16

安装 vLLM

pip install vllm -i https://mirrors.aliyun.com/pypi/simple/

升级 FastChat & vLLM

git pull
pip install -e ".[model_worker,webui]"
pip install -U vllm

部署 LLM

运行 Controller

python -m fastchat.serve.controller

运行 OpenAI API Server

python -m fastchat.serve.openai_api_server

运行 Model Worker Qwen-1_8B-Chat export CUDA_VISIBLE_DEVIC

Tabby 的基准测试

wrk

安装

git clone https://github.com/wg/wrk.git
cd wrk
#使用多线程(机器的处理器核数)加速编译,
make -j $(nproc)
cp wrk /usr/local/bin/

Tabby Server

服务器:NVIDIA T4 16GB X 4

部署

  • 模型:TabbyML/DeepseekCoder-6.7B
docker run -d --gpus all -p 8080:8080 \
  -v /data/zhw/tabby/data:/data \
  tabbyml/tabby:latest \
  serve --model TabbyML/DeepseekCoder-6.7B \
  --device cuda --parallelism 4
  • 模型:TabbyML/DeepseekCoder-1.3B
docker run -d --gpus all -p 8080:8080 \
  -v /data/zhw/tabby/data:/data \
  tabbyml/tabby:latest \
  serve --model TabbyML/DeepseekCoder-1.3B \
  --device cuda --parallelism 12

curl 测试 curl http://127.0.0.

人工智能编码助手(AI Coding Assistant)

主要功能

  • 代码完成(Code completion):根据提示中输入的代码上下文建议接下来的几行。
  • 代码生成(Code generation):根据开发人员的自然语言提示生成代码。
  • 代码聊天(Code chat):允许开发人员与机器人对话,以获得调试、文档、学习新概念和其他与代码相关问题的帮助。

参考资料

Sourcegraph Cody

Sourcegraph Cody

Sourcegraph

代码搜索

Repositories

Cody

代码 AI 补全

AI 聊天

Cody 的代码 AI 补全的生命周期

代码补全的四个步骤

每一次 Cody 的代码补全都经历了四个步骤:

  • 规划(Planning):分析代码上下文以确定生成补全的最佳方法,例如:使用单行还是多行补全。
  • 检索(Retrieval):从代码库中找到相关的代码示例,为 LLM 提供最佳可能的上下文。
  • 生成(Generation):使用 LLM 基于提供的提示和上下文生成代码补全。
  • 后处理(Post-processing):精炼和过滤原始的 AI 生成的补全,以提供最相关的建议。

Cody 的目标是提供高质量的补全,无缝集成到开发者的工作流程中。

人工智能编码助手(AI Coding Assistant)功能

交互方式

代码自动完成

AI 聊天

核心功能

功能 说明
代码补全 基于海量数据提供实时地代码补全服务,包括行内补全(单行补全)和片段补全(多行补全)。
添加注释 智能为选定的代码生成注释,目前在整个函数级别的生成注释效果较好。
解释代码 智能解析代码意图,为选定的代码生成解释,辅助阅读并理解代码。
生成单测 在写完业务逻辑后,为选定的代码生成单测,即可智能生成具备业务语义的测试用例,从而提升问题发现的效率。
代码优化 基于大模型的代码理解能力和静态源码分析能力,支持对选定的代码片段进行分析理解并提出优化、改进建议,还能直接基于改进建议生成代码补丁。

代码补全

添加注释

解释代码

代码大模型

  • 模型的评估
  • 模型的参数
  • 模型的训练
  • 模型的推理
  • 最大 Token (CodeFuse)
    • 输入:1280 Tokens
    • 输出:1024 Tokens

模型下载

编程语言

  • Python
  • Java
  • JavaScript
  • TypeScript
  • C
  • C++
  • C#
  • Go
  • Rust
  • PHP
  • Ruby
  • Swift
  • Kotlin
  • Scala
  • SQL
  • HTML
  • CSS
  • Shell
  • Markdown
  • JSON
  • YAML
  • XML

存储库 (Repository)

  • GitHub
  • GitLab
  • Bitbucket
  • SVN

IDE JetBrains IntelliJ IDEA PyCharm Web

在 MacBook Pro M2 Max 上安装 FastChat

FastChat

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

FastChat Server 架构图

安装 FastChat

克隆代码

git clone https://github.com/lm-sys/FastChat
cd FastChat

创建虚拟环境

python -m venv env
source env/bin/activate

安装

pip install --upgrade pip
pip install -e ".[model_worker,webui]"

升级 FastChat

git pull
pip install -e ".[model_worker,webui]"

创建大模型链接 LLM Qwen mkdir Qwen ln -s /Users/junjian/HuggingFace/Qwen/Qwen-14B-Chat Qwen/Qwen-14B-Chat ln -s /Users/junjian/HuggingFace/Qwen/Qwen-1_8B Qwen/Qwen-1_8B ln -s /Users/junjian/HuggingFace/Qwen/Qwen-1_8B-Chat Qwen/Qwen-1_8B-Chat ln

在 GeForce GTX 1060 上部署 Tabby - AI编码助手

我的 GPU:GP106 [GeForce GTX 1060 6GB]

安装 NVIDIA 驱动

查看哪些进程正在使用 NVIDIA 设备

lsof -n -w /dev/nvidia*

lsof 是一个在 Unix 和类 Unix 系统(如 Linux)上的命令行工具,用于列出当前系统打开的文件。在这里,"文件" 的概念很广泛,除了常见的文件和目录,还包括网络套接字、设备、管道等。

  • -n 参数告诉 lsof 不要将网络号转换为主机名,这可以加快 lsof 的运行速度。
  • -w 参数告诉 lsof 不要抑制警告信息。
  • /dev/nvidia* 是要查看的文件的路径,* 是通配符,表示所有以 /dev/nvidia 开头的文件。在这里,这些文件通常代表 NVIDIA 的设备。

所以,sudo lsof -n -w /dev/nvidia* 命令的作用是查看哪些进程正在使用 NVIDIA 设备。

杀死使用 NVIDIA 设备的进程或停止服务

  • kill -9 <pid>
  • sudo systemctl stop <service_name>

列出系统中所有需要驱动的设备 sudo ubuntu-drivers devices WARNING:root:_pkg_get_support nvidia-driver-525: package has invalid

基于 VSCode 使用 Tabby 插件搭建免费的 GitHub Copilot

使用的模型

  • 代码生成 Tabby 使用的是 Deepseek Coder 6.7B 模型。

部署服务器端

安装 Visual Studio Code

Tabby 安装

Tabby 配置

单击状态栏中的 Tabby 图标,打开 Tabby 配置页面。

参数

  • EndPoint: http://172.16.33.66:8080

使用 Tabby

代码生成

基于 IntelliJ IDEA 使用 Tabby 和 CodeGPT 插件搭建免费的 GitHub Copilot

使用的模型

  • 代码生成 Tabby 使用的是 Deepseek Coder 6.7B 模型。
  • AI 聊天 CodeGPT 使用的是 ChatGLM3-6B 模型。这个后面考虑使用 Deepseek Coder 6.7B 来替换。

部署服务器端

安装 InteliJ IDEA

安装插件

插件

安装

打开 IntelliJ IDEA,选择 Settings 菜单,选择 Plugins,搜索 TabbyCodeGPT,点击 Install 安装。

  • Tabby
  • CodeGPT

配置插件

Tabby

参数

  • Endpoint: http://172.16.33.66:8080

CodeGPT

参数

  • Service: OpenAI Service
  • API key: NULL
  • Model: GPT-3.5(4k)
  • Base host: http://172.16.33.66:8000

使用插件

AI 聊天

代码生成

基于 PyCharm 使用 Tabby 和 CodeGPT 插件搭建免费的 GitHub Copilot

使用的模型

  • 代码生成 Tabby 使用的是 Deepseek Coder 6.7B 模型。
  • AI 聊天 CodeGPT 使用的是 ChatGLM3-6B 模型。这个后面考虑使用 Deepseek Coder 6.7B 来替换。

部署服务器端

Tabby 服务

docker run -d --runtime nvidia --name tabby -p 8080:8080 \
  -e TABBY_DOWNLOAD_HOST=modelscope.cn \
  -e NVIDIA_VISIBLE_DEVICES=3 \
  -e RUST_BACKTRACE=1 \
  -v `pwd`/.tabby:/data tabbyml/tabby \
  serve --model TabbyML/DeepseekCoder-6.7B  --device cuda

OpaneAI 服务

  • 启动服务 Controller
python -m fastchat.serve.controller
  • 启动服务 Model Worker
python -m fastchat.serve.model_worker \
  --model-path THUDM/chatglm3-6b --port 21002 \
  --worker-address http://localhost:21002 \
  --model-names chatglm3-6b,gpt-3.5-turbo