vLLM 部署 Qwen1.5 LLM

下载模型

git clone https://www.modelscope.cn/qwen/Qwen1.5-7B-Chat-GPTQ-Int4.git

启动服务

python -m vllm.entrypoints.openai.api_server \
    --host 0.0.0.0 --port 9000 \
    --model Qwen/Qwen1.5-7B-Chat-GPTQ-Int4 \
    --quantization gptq \
    --tensor-parallel-size 2 \
    --dtype=half \
    --gpu-memory-utilization 0.95
  • 可以使用环境变量 CUDA_VISIBLE_DEVICES=2,3 来指定使用的 GPU。
  • --dtype=half T4 不支持 bfloat16,可以使用 float16。
  • --gpu-memory-utilization 默认为 0.9,这里因为 Qwen 的上下文为 32k,0.9 还不能满足,也可以通过 max-model-len 参数来调整上下文长度。

使用 curl 测试

  • chat completions
curl http://localhost:9000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "Qwen/Qwen1.5-7B-Chat-GPTQ-Int4",
        "messages": [
            {"role": "system", "content": "你是一个有用的助手。"},
            {"role": "user", "content": "天空为什么是蓝色的?"}
        ]
    }'

MLX: An array framework for Apple silicon

MLX 是一个为 Apple Silicon 芯片上的机器学习研究设计的 array 框架,由 Apple 机器学习研究团队提供。

  • 熟悉的 API:MLX 拥有一个与 NumPy 紧密对应的 Python API。MLX 还拥有功能齐全的 C++、C 和 Swift API,这些 API 也紧密地反映了 Python API。MLX 拥有更高级别的包,如 mlx.nn 和 mlx.optimizers,它们的 API 紧密跟随 PyTorch,以简化构建更复杂模型的过程。
  • 统一内存:MLX 与其他框架的一个显著区别在于其统一内存模型。MLX 中的数组存在于共享内存中。可以在任何支持的设备类型上执行 MLX 数组的操作,无需数据传输。
  • MLX 的设计受到了像 NumPyPyTorchJaxArrayFire 这样的框架的启发。
  • conda
conda install -c conda-forge mlx
conda install -c conda-forge mlx-lm
pip install sentence_transformers   # Mistral requires
pip install jinja2                  # Mistral requires
pip install tiktoken                # Qwen requires

生成式AI

  • 闭源
    • 云 API
    • 易用
    • 功能强大
    • 成本低
    • 安全性低

每个角色的工作一般由多个任务组成,需要先分解任务,然后对每个任务进行生成式人工智能潜力分析。

人工智能赋能任务的方式

  • 增强
  • 自动化

要完成使用人工智能来增强或自动化任务,需要考虑的主要因素:

  • 技术可行性
  • 业务价值
  • 成本节省 -> 收入增长
  • 改造工作流程

Rust 入门

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sudo sh

这里加了 sudo 是因为修改配置文件需要权限。

Rustup 元数据和工具链将安装到 Rustup 的主目录,位于:~/.rustup,这可以使用 RUSTUP_HOME 环境变量进行修改。

Cargo 主目录位于:~/.cargo,这可以使用 CARGO_HOME 环境变量进行修改。

cargo、rustc、rustup 等命令安装到 Cargo 的 bin 目录,位于:~/.cargo/bin

  • 更新 Rust
sudo rustup update
  • 卸载 Rust
sudo rustup self uninstall
  • 查看版本
$ cargo --version
cargo 1.76.0 (c84b36747 2024-01-18)
$ rust rustc --version
rustc 1.76.0 (07dca489a 2024-02-04)
$ rust rustdoc --version
rustdoc 1.76.0 (07dca489a 2024-02-04)

cargo 是 Rust 的构建工具,类似于 npm、pip、go 等。

rustc 是 Rust 的编译器。

rustdoc 是 Rust 的文档生成工具。

Kimi(月之暗面)简历的探索

这里使用了 Kimi 月之暗面 对简历这个场景进行了探索,Kimi 支持 128k 的长上下文,超过20万个汉字。

根据李秀宁的简历,我们可以对她的技能和经验进行以下评估:

1. 编程技能:

她掌握多种编程语言,包括MATLAB、C、C++、Python,这些都是算法开发中常用的语言。
熟练使用多个开发平台,如MATLAB、Visual Studio、Eclipse、Qt、CCS、Pycharm,这表明她具备跨平台开发的能力。
熟悉OpenCV、yolov 5等图像处理库,这些是计算机视觉领域的重要工具。

2. 专业知识:

她掌握了多种信号处理方法,如快速傅里叶变换、短时傅里叶变换、数字滤波器设计等,这些都是信号处理和图像处理领域的基础。
熟悉深度学习框架,如tensorflow、keras、Pytorch,这些是当前人工智能和机器学习领域的主流工具。

3. 工作经验:

// ...
根据您提供的两份简历的内容,我们可以对比一些关键信息来确定是否为同一个人:

姓名:

第一份简历的姓名是“李秀宁”。
第二份简历的姓名是“樊梨花”。
身份证号:

第一份简历的身份证号是“341422199204178851”。
第二份简历的身份证号是“341422199204177851”。
出生年月:

两份简历的出生年月都是“1992-04”。
教育背景:

// ...

DeepSeek-Coder 论文解读

  1. GitHub数据抓取
  2. 规则过滤
  3. 依存分析
  4. 仓库级重复数据删除
  5. 质量筛选

下表中列出保留的87种编程语言统计摘要(磁盘大小、文件数量和百分比),总数据量为798 GB,包含603百万个文件。

Hugging Face NLP Course

以下是常见 NLP 任务的列表:

  • 对整个句子进行分类:
    • 获取评论的情绪
    • 检测电子邮件是否为垃圾邮件
    • 确定句子在语法上是否正确
    • 确定两个句子在逻辑上是否相关
  • 对句子中的每个词进行分类:
    • 识别句子的语法成分(名词、动词、形容词)
    • 识别句子的命名实体(人、地点、组织)
  • 生成文本内容:
    • 用自动生成的文本完成提示
    • 用屏蔽词填充文本中的空白
  • 从文本中提取答案:
    • 给定问题和上下文,根据上下文中提供的信息提取问题的答案
  • 从输入文本生成新句子:
    • 将文本翻译成另一种语言
    • 总结文本
  • 语音识别:
    • 生成音频样本的转录
  • 计算机视觉:
    • 生成图像描述
    • 目标检测
from transformers import pipeline

classifier = pipeline("sentiment-analysis")
classifier("I've been waiting for a HuggingFace course my whole life.")
[{'label': 'POSITIVE', 'score': 0.9598047137260437}]

将一些文本传递到 pipeline 时涉及三个主要步骤:

  1. 文本被预处理为模型可以理解的格式。
  2. 预处理的输入被传递给模型。
  3. 模型处理后输出最终人类可以理解的结果。

在 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(三):分享微调后的模型到 HuggingFace Hub

pip install mlx-lm
  1. 加入 MLX Community 组织
  1. 在 MLX Community 组织中创建一个新的模型 mlx-community/Mistral-7B-v0.1-LoRA-Text2SQL
  1. 克隆仓库 mlx-community/Mistral-7B-v0.1-LoRA-Text2SQL
git clone https://huggingface.co/mlx-community/Mistral-7B-v0.1-LoRA-Text2SQL
  1. 将生成的模型文件(lora_fused_model 目录下的所有文件)复制到仓库目录下
  1. 上传模型到 HuggingFace Hub
git add .
git commit -m "Fine tuning Text2SQL based on Mistral-7B using LoRA on MLX" 
git push
  1. 不能 push

错误信息:

在 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

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

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

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

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

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

困惑度基于模型对测试集数据的概率,它的值越小,说明模型的性能越好。具体来说,如果一个模型的困惑度为 P,那么当这个模型预测下一个词的时候,它的不确定性(或者说“困惑度”)就相当于在 P 个词中随机选择一个词。

例如,如果一个模型的困惑度为 10,那么这个模型预测下一个词的不确定性就相当于在 10 个词中随机选择一个词。如果另一个模型的困惑度为 5,那么这个模型预测下一个词的不确定性就相当于在 5 个词中随机选择一个词。因此,困惑度越小,模型的性能就越好。

克隆代码

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make LLAMA_CUBLAS=1

--n-gpu-layers 设置 -1 没有效果,设置大一点的数字即可,如:15000

可以从 TheBloke 下载更多不同量化的 GGUF 模型。

  1. 转换 GGUF
python convert-hf-to-gguf.py \
    --outtype f32 \
    --outfile ~/HuggingFace/wangjunjian/gguf/qwen-7b-chat-f32.gguf \
    ~/HuggingFace/Qwen/Qwen-7B-Chat

量化 Q5_K_M .

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 服务的端口。