Skip to content

Latest commit

 

History

History
211 lines (136 loc) · 6.67 KB

2024.01.codellama.vscode.md

File metadata and controls

211 lines (136 loc) · 6.67 KB

使用 code llama 配合 vscode 来做代码自动补全

github copilot 是非常优秀的vscode插件,可以让程序员访问到gpt-4的能力,做代码补全和问答,一切都在vscode里面,但是如果我们是企业应用场景,数据是不能离开企业局域网的,那么我们就需要自己搭建一个类似的内网服务,来做代码补全。

我们使用code llama来提供代码补全的服务,使用vscode来访问这个服务。

整体部署架构如下:

使用 continue 来支持 chat

部署 code llama

我们选择 CodeLlama-34b-Instruct-hf , CodeLlama-13b-Instruct-hf 这两个模型,对比一下。

# we use fastchat to host code llama service

conda activate /data/env/jupyter
# conda deactivate

cd /data/workspace/jupyter/yanshu

# on a new tab, create control service
python -m fastchat.serve.controller

# on a new tab, create api service
python -m fastchat.serve.openai_api_server --host 0.0.0.0 --port 8000

# on a new tab, run the code llama service
export CUDA_VISIBLE_DEVICES=0
python -m fastchat.serve.model_worker --model-path /data/huggingface/CodeLlama-34b-Instruct-hf --debug DEBUG

# if running on multiple gpu
export CUDA_VISIBLE_DEVICES=2,3,4,5
python -m fastchat.serve.model_worker --model-path /data/huggingface/CodeLlama-34b-Instruct-hf --num-gpus 4 --max-gpu-memory 20Gib --debug DEBUG

# does not work, do not know why
# unset CUDA_VISIBLE_DEVICES
# python -m fastchat.serve.model_worker --model-path /data/huggingface/CodeLlama-34b-Instruct-hf --gpus 2,3 --debug DEBUG

# if using 13B model
export CUDA_VISIBLE_DEVICES=0
python -m fastchat.serve.model_worker --model-path /data/huggingface/CodeLlama-13b-Instruct-hf --debug DEBUG

CodeLlama-34b-Instruct-hf

CodeLlama-13b-Instruct-hf

部署 vscode 插件 continue

我们使用vscode的插件 Continue, 来访问code llama服务。

安装好 continue 插件以后,按照官方文档,我们做一下配置,后端服务指向 code llama

修改 ~/.continue/config.json , 把下面的配置,添加进去

{
  "models": [
    {
      "title": "OpenAI-compatible server / API",
      "provider": "openai",
      "model": "CodeLlama-34b-Instruct-hf",
      "apiKey": "EMPTY",
      "apiBase": "http://172.21.6.105:8000/v1"
    }
  ]
}

如果是13B的模型,改成这样

{
  "models": [
    {
      "title": "OpenAI-compatible server / API",
      "provider": "openai",
      "model": "CodeLlama-13b-Instruct-hf",
      "apiKey": "EMPTY",
      "apiBase": "http://172.21.6.105:8000/v1"
    }
  ]
}

使用体验

然后我们就赶快来试试吧。真的还不错呢。

当然,我们也能看到,continue的使用逻辑,和copilot是不一样的,更像copilot chat,也就是他并不是随着用户编辑代码,给出实时的建议,而是通过对话框的方式,给出答案。不过,作为开源的方案,也不错啦。未来continue会支持自动补全,这个要看后续版本了。

codellama对中文支持有点限制,能看明白中文的提问,但是如果没有特别指示,回答就是英文的。这里就需要明确要求他用中文问答,这个后续可以尝试在提示词环节调整,来改善。

13B和34B模型的对比,体验下来,13B的效果还不错,而且计算速度快很多,所以我们选择13B的模型。

GPU 消耗

当我们通过vscode插件continue去访问code llama,来给代码提供各种分析的时候,GPU消耗还是很夸张的,gpu 基本100%了。资源不够的话,只能选择小一些的模型了。后面ocp部署实验,我们就选择13B的小一些的模型了。

使用 tabby 来支持自动补全

目前continue项目只支持类似copilot chat的服务,也就是需要在vscode里面单独开一个sidecar,然后通过对话框的方式,来和模型交互。未来continue会支持copilot的自动补全功能,但是目前还没有,为了支持自动补全,我们可以使用tabby。

部署 tabby 服务端

我们按照文档,来部署tabby服务端

# create a workspace, and sync LLM into it
mkdir -p /data/workspace/tabby/models

# copy the models into workspace
VAR_HOST=144.202.112.104

while true; do
  rsync -aHAXxv --numeric-ids --delete -P -e "ssh -T -c aes256-gcm@openssh.com -x -o Compression=no -o ProxyCommand='connect-proxy -S 172.21.1.211:18805 %h %p'" root@${VAR_HOST}:/root/.tabby/models/  /data/workspace/tabby/models/
  if [ $? -eq 0 ]; then
        break
  fi
  sleep 1  # Optional: waits for 1 second before trying again
done

# start the tabby service

# https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#configuring-podman
# https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/cdi-support.html

dnf install -y nvidia-container-toolkit

# nvidia-ctk runtime configure --runtime=crio
# INFO[0000] Loading config: /etc/crio/crio.conf
# INFO[0000] Config file does not exist; using empty config
# INFO[0000] Successfully loaded config
# INFO[0000] Wrote updated config to /etc/crio/crio.conf
# INFO[0000] It is recommended that crio daemon be restarted.

# systemctl restart crio

nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
# ...
# INFO[0078] Generated CDI spec with version 0.5.0

nvidia-ctk cdi list
# INFO[0000] Found 2 CDI devices
# nvidia.com/gpu=0
# nvidia.com/gpu=1
# nvidia.com/gpu=all

# 如果你希望使用所有的gpu,可以使用 nvidia.com/gpu=all
# podman  run -it --device nvidia.com/gpu=all  -p 18180:8080 \
#     -v /data/workspace/tabby:/data:Z \
#     docker.io/tabbyml/tabby serve --model TabbyML/CodeLlama-13B --device cuda

# 我们指定一个gpu
podman run --rm -it --device nvidia.com/gpu=1  \
    -p 18180:8080 \
    -v /data/workspace/tabby:/data:Z \
    docker.io/tabbyml/tabby serve --model TabbyML/CodeLlama-13B --device cuda

安装 vscode 插件 tabby

在vscode里面,下载安装tabby,并配置api地址

使用体验

我们赶快来试试吧。真的还不错呢。