LLM 的基准测试

  • 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,否则会报错 ❌:

data: {
  "text": "**NETWORK ERROR DUE TO HIGH TRAFFIC. PLEASE REGENERATE OR REFRESH THIS PAGE.**\n\n(FlashAttention only supports Ampere GPUs or newer.)", 
  "error_code": 50001
}

Tabby 的基准测试

  • 模型: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

\\n 不能写为 \n,否则会报错:Failed to parse the request body as JSON: segments.prefix: control character (\u0000-\u001F) found while parsing a string at line 2 column 0

  • 基准测试工具:wrk
  • 持续时间:1 分钟
  • 超时时间:10 秒

Sourcegraph Cody

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

Cody 的目标是提供高质量的补全,无缝集成到开发者的工作流程中。创建一个有效的代码 AI 助手需要正确的上下文(context)提示(prompt)LLM。通过语法分析(Tree-sitter),智能提示工程(smart prompt engineering),正确的 LLM 选择和正确的遥测(telemetry),不断迭代和提高 Cody 的代码补全质量和接受率(acceptance rate)。最新的数字显示 Cody 的补全接受率高达 30%

  • 流式处理(Streaming):使用流式处理(这样 LLM 可以逐个 Tokens 返回响应),客户端可以实现更高级的机制来提前终止补全请求。例如,如果你正在寻找完成一个函数定义,而 LLM 的响应开始在当前函数完成后定义另一个函数,那么你可能甚至不想显示第二个函数,可以立刻终止响应,而不是等到请求完成。
  • TCP 连接复用(TCP connection reusing):自动完成需要大量的请求。大约每几个按键就需要一个请求。每个新的请求都需要客户端和服务器之间的握手,这会增加延迟。这里有一个解决方案,那就是保持 TCP 连接开放。我们不知道的是:不同的 HTTP 客户端在这里有不同的默认设置,因为一个 Cody 自动完成请求是从客户端路由到 Sourcegraph 服务器,然后再到 LLM,我们需要确保在这个管道的每一步都复用 TCP 连接。

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

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

在 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

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

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

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

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

NVIDIA Driver 安装

困难重重 😭

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

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

安装驱动

sudo sh NVIDIA-Linux-x86_64-535.129.03.run

日志查看错误信息

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

Introducing the Coding LLM Leaderboard

更新日期:2023-11-13

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

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

  • brew cleanup tabby 命令的意思是清理所有旧版本的 tabby 包和缓存的 tabby 下载。

DeepSeek Coder: Let the Code Write Itself

选择了两个通用基准来评估:

  • HumanEval: 用于测量从文档字符串合成程序的功能正确性的基准。它由 164 个 Python 编程问题组成。
  • MultiPL-E: 将 HumanEval 翻译为 18 种编程语言。

下面显示了 OctoCoder vs Base HumanEval prompt 的示例,在这里可以找到它。

如果您不想使用提供的 API apply_chat_template 加载模板 tokenizer_config.json,您可以使用以下模板与我们的模型聊天。将替换 ['content'] 为您的指令和模型之前(如果有)的响应,然后模型将生成对当前给定指令的响应。 You are an AI programming assistant, utilizing the DeepSeek Coder model, developed by DeepSeek Company, and you only answer questions related to computer science.

CodeGPT: 智能辅助编程

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

这里访问的 OpenAI 服务是我自己搭建的,使用的是 FastChat + ChatGLM3-6B。

模型缓存到 ~/.codegpt/models/gguf 目录下,如果模型不存在,可以单击 Download Model 下载。

也可以自己到 HuggingFace 下载模型,然后放到 ~/.codegpt/models/gguf 目录下。

单击 Start server 启动服务。

查看缓存的模型

ls ~/.codegpt/models/gguf
deepseek-coder-6.7b-instruct.Q5_K_M.gguf

可以到 HuggingFace 下载 LLaMA 2-7B-Chat 模型的 GGUF格式。

  • Service: LLaMA C/C++ Port (Free, Local)
  • Use custom model
    • Model path: 您下载的 LLaMA 2-7B-Chat 模型的路径
    • Prompt template: Llama

单击 Start server 启动服务。

CodeFuse

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

通过检索增强生成(Retrieval Augmented Generation,RAG)、工具学习(Tool Learning)和沙盒

AI 大模型基础服务架构图

<center>
<div class="mermaid">
%%{init: {"flowchart": {"htmlLabels": false}} }%%
flowchart TB
  subgraph tool[聊天工具]
    direction TB
    chatgpt-next(ChatGPT Next Web)
    langchain-chatchat(Langchain-Chatchat)
    wechat(chatgpt-on-wechat)
  end
  subgraph business-application[业务应用层]
    direction TB
    app1(发电)
    app2(调度)
    app3(输变电)
// ...

AI 大模型

Model Average ARC HellaSwag MMLU TruthfulQA Winogrande GSM8K
mistralai/Mistral-7B-Instruct-v0.2 65.71 63.14 84.88 60.78 68.26 77.19 40.03
01-ai/Yi-34B-Chat 65.32 65.44 84.16 74.9 55.37 80.11 31.92
Qwen/Qwen1.5-14B-Chat 62.37 58.79 82.33 68.52 60.38 73.32 30.86
01-ai/Yi-6B-200K 56.76 53.75 75.57 64.65 41.56 73.64 31.39
Qwen/Qwen1.5-7B-Chat 55.15 55.89 78.56 61.65 53.54 67.72 13.57
01-ai/Yi-6B 54.08 55.55 76.57 64.11 41.96 74.19 12.13
deepseek-ai/deepseek-llm-7b-chat 59.38 55.8 79.38 51.75 47.98 74.82 46.55
internlm/internlm-20b-chat 55.53 55.38 78.58 58.53 43.22 78.77 18.73
deepseek-ai/deepseek-coder-7b-instruct-v1.5 50.89 48.55 72.35 50.45 46.73 66.85 20.39

Langchain‐Chatchat 和 FastChat 结合

fatal: fetch-pack: invalid index-pack output

Cloning into 'Langchain-Chatchat'...
remote: Enumerating objects: 8958, done.
remote: Counting objects: 100% (270/270), done.
remote: Compressing objects: 100% (168/168), done.
error: 6146 bytes of body are still expectediB | 367.00 KiB/s 
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output

这个错误可能是由于网络问题或者 Git 服务器问题导致的。当 Git 在克隆仓库时,它需要从服务器下载一些数据。如果在这个过程中连接被中断,或者服务器发送的数据有问题,就可能会出现这个错误。

你可以尝试以下几种解决方法: