在 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

NVIDIA Driver 安装

困难重重 😭

服务器是 NVIDIA Tesla T4,系统是 Ubuntu 20.04,从 Kubernetes 集群中分离出来的,因 Tabby 请求 CUDA >= 11.7,需要重新安装新版本的驱动。

下载 NVIDIA Driver

安装 NVIDIA Driver

sudo sh NVIDIA-Linux-x86_64-535.129.03.run

就两步就完成了,简单吧 😄

实际安装过程 😭

安装驱动

sudo sh NVIDIA-Linux-x86_64-535.129.03.run

日志查看错误信息

Tabby - GitHub Copilot 的开源替代解决方案

Tabby

Coding LLMs Leaderboard (TabbyML Team)

Introducing the Coding LLM Leaderboard

更新日期:2023-11-13

Next Line Accuracy

什么是 Next Line Accuracy ?

在代码补全中,模型预测的是跨越多行的代码块。一种朴素的方法是直接将预测的代码块与实际提交的代码进行比较。虽然这种方法看起来理想,但它通常被认为是一个“过于稀疏”的度量标准。另一方面,下一行准确度可以作为整体代码块匹配准确度的可靠代理。

只有红色框内的内容被用于与真实值进行比较,以计算准确度指标。

安装 Tabby

Homebrew (Apple M1/M2)

安装 tabby brew install tabbyml/tabby/tabby ==> Fetching tabbyml/tabby/tabby ==> Downloading https://github.com/TabbyML/tabby/releases/download/v0.7.