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 在克隆仓库时,它需要从服务器下载一些数据。如果在这个过程中连接被中断,或者服务器发送的数据有问题,就可能会出现这个错误。

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

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

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