2024.06.25

Deepseek-coder-v2で無料のGitHub Copilotの実現について

1. はじめに

こんにちは、グループ研究開発本部 次世代システム研究室のT.D.Qです。今回は、DeepSeek-Coder-V2Continue.devを使用して、無料でGitHub Copilotのようなコーディング支援環境を構築する方法をご紹介します。GitHub Copilotは有料サービスですが、オープンソースのDeepSeek-Coder-V2とContinue.devを利用することで、同様の機能を無料で実現できます。

目次

  1. DeepSeek-Coder-V2の概要
  2. 環境設定
  3. 設定の検証
  4. 性能評価
  5. まとめ
  6. 参考文献とリンク
  7. 宣伝

1. DeepSeek-Coder-V2の概要

DeepSeek-Coder-V2はコードインテリジェンスの限界を押し広げる強力なオープンソース言語モデルであり、一般的な言語スキルも強力に維持しています。その性能は、多くのコーディングおよび数学ベンチマークにおいて、GPT-4 Turboなどのクローズドソースモデルに匹敵するか、あるいはそれを上回ります。

  • DeepSeek-Coder-V2は、DeepSeek AIによって開発されたオープンソースのMixture-of-Experts (MoE)コード言語モデルです。
  • コード特化のタスクにおいて、クローズドソースモデルであるGPT4-Turboに匹敵する性能を発揮します。
  • DeepSeek-V2の中間チェックポイントからさらに6兆トークンを追加して事前学習を行い、コーディングと数学的推論能力を大幅に向上させています。
  • MoEモデルは、大規模なニューラルネットワークを複数の小さなサブネットワーク(エキスパート)に分割し、各エキスパートが特定の入力データやタスクを処理するように設計されています。
  • DeepSeek-Coder-33Bと比較して、コード関連タスク、推論、一般的な能力において顕著な進歩を示しています。
  • 対応するプログラミング言語の数が86から338に増加し、コンテキスト長も16Kから128Kトークンに延長されています。

主要な特徴

  • コード、数学、自然言語の多様なコーパスで事前学習され、総計6兆トークンに達しています。
  • 対応するプログラミング言語は338種類で、DeepSeek-Coderの86種類から大幅に増加しています。
  • 最大コンテキスト長は16Kから128Kトークンに延長されています。
  • 16Bおよび236Bパラメータのバージョンが利用可能で、それぞれ2.4Bおよび21Bのアクティブパラメータを持ちます。

ベンチマーク結果

コーディングと数学

  • DeepSeek-Coder-V2は、コード生成と数学ベンチマークにおいて最先端の性能を達成し、GPT-4 Turbo、Claude 3 Opus、Gemini 1.5 Proなどのクローズドソースモデルを上回ります。
  • LiveCodeBench(コード生成を評価)では、DeepSeek-Coder-V2は74.2 Pass@1を記録し、GPT-4 Turboの71.8、Claude 3 Opusの68.2、Gemini 1.5 Proの65.7を上回ります。
  • SWEbench(複雑な指示の遂行をテスト)では、DeepSeek-Coder-V2は62.8 Pass@1を記録し、GPT-4 Turboの68.5には劣るものの優れた結果を示しています。
  • MATH(数学的推論を評価)では、DeepSeek-Coder-V2は89.6の正確さを達成し、GPT-4 Turboの87.9、Claude 3 Opusの85.1、Gemini 1.5 Proの83.6を上回ります。

DeepSeek-Coder-V2の性能評価(引用:DeepSeek)

一般言語

  • DeepSeek-Coder-V2は、コーディングと数学に特化している一方で、一般的な言語能力においても優れた性能を維持しています。
  • BBHやMMLU(言語理解を測定)では、DeepSeek-Coder-V2はそれぞれ83.9と79.2を記録し、DeepSeek-V2の79.7と78.1を上回ります。また、GPT-4 Turboの85.2と81.7に匹敵する性能を示しています。

2. 環境設定

今回の環境設定は、MacOS Ventura 13.5を搭載した32GBメモリ、Apple M2 ProチップのPC上で行います。

2.1 必要なツール

お使いのOSに関係なく、以下のコマンドで現在使用しているバージョンを確認してください:

python3 --version
pip3 --version

Python 3.11以降およびpip 23以降がインストールされている必要があります。

次に、deepseek-coder-v2という名前の仮想環境を作成します:

python3 -m venv deepseek-coder-v2
source deepseek-coder-v2/bin/activate  # macOS/Linuxの場合

仮想環境を有効化した後、システムに影響を与えずに必要なパッケージをインストールできます。

次のコマンドを使用して、通常のユーザー権限でShellGPTとローカルLLM統合をインストールします:

pip3 install shell-gpt
pip3 install 'shell-gpt[litellm]' 

これにより、ユーザー用にShellGPTがインストールされ、ローカルLLM統合が設定されます。pipパッケージをroot権限でインストールすることは、OSが依存するパッケージを壊す可能性があるため推奨されません。インストール後、次のコマンドを実行してみてください:

sgpt

このコマンドが自動的に見つからない場合は、バイナリの場所をPATH変数に追加する必要があるかもしれません。その時に、pipがバイナリをどこにインストールしたかを確認できます。

pip3 show --files shell-gpt

2.2 DeepSeek-Coder-V2のインストール

Ollamaのインストール

Ollamaは、ローカルマシンでLLMを動かすことができるアプリケーションです。LinuxでDeepSeek-Coder-V2モデルをインストールして実行するには、新しいシェルを開き、次のコマンドを入力します:

curl -fsSL https://ollama.com/install.sh | sh
ollama run deepseek-coder-v2

今回はDeepSeek-Coder-V2をローカルマシンでインストールする際に、16Bモデルを使用します。このモデルは約8.9GBの容量があり、ダウンロードにはネットワーク速度によって約1時間かかる場合もあります。

次に、ShellGPTをOllamaに接続するための設定を行います。最初のsgptコマンドの実行時に、OpenAIシステムを使用して自動的に作成された.sgptrcファイルを編集します:

nano ~/.config/shell_gpt/.sgptrc

以下のように対応する行を修正して、ファイルを保存します:

{
  "DEFAULT_MODEL": "deepseek-coder-v2",
  "OPENAI_API_KEY": "not-needed",
  "USE_LITELLM": true,
  "OPENAI_USE_FUNCTIONS": false
}

OllamaはAPIキーなしで動作しますが、sgptコマンドはAPIキーが提供されていない場合にエラーをスローしますので、「not-needed」という任意な文字列を設定しておきました。

2.3 Continue.dev Pluginのインストール

Continue.devは、GitHub Copilotとほぼ同じ機能を提供するオープンソースのVSCode拡張機能です。このツールを使って、VSCode内から直接Ollamaを経由してdeepseek-coder-v2モデルにアクセスし、コードの自動生成や修正を行うことができます。

Continue.devのインストール

  1. VSCodeを開き、拡張機能タブ(ショートカット: Ctrl+Shift+X)に移動します。
  2. 「Continue」を検索して、このプラグインをインストールします。

Continue.devにDeepSeek-Coder-V2を追加する

  1. インストール後、左側のサイドバーにあるContinueのアイコンをクリックして、Continueのインターフェースを開きます。
  2. 右下の歯車アイコンをクリックして、設定ファイルconfig.jsonを開きます。

設定ファイルconfig.jsonに以下のコードを変更します。

{
  "title": "DeepSeek-coder-v2",
  "model": "deepseek-coder-v2",
  "provider": "ollama",
  "completionOptions": {},
  "apiKey": "sk-1234567890abcdef"
},
"tabAutocompleteModel": {
  "title": "DeepSeek-coder-v2",
  "provider": "ollama",
  "model": "deepseek-coder-v2"
}

設定ファイルconfig.jsonは通常、$HOME/.continue/config.jsonにあります。VSCodeから直接編集することができます。

  1. 設定ファイルを保存し、VSCodeに戻ります。DeepSeek-Coder-V2が追加され、使用可能な状態になります。

3. 設定の検証

Deepseek-coder-v2を検証するため、Pygameを用いたスネークゲームを生成するタスクを依頼しましょう。

VSCode上で、Continueプラグインを使ってPygameを用いたスネークゲームを生成するプロンプトを入力します。生成されたゲームコードは以下の通りです。

import pygame
import random

# ゲーム画面の設定
WIDTH = 800
HEIGHT = 600
FPS = 10

# 色の定義
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

# Pygameの初期化
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()

# スネークのクラス定義
class Snake:
    def __init__(self):
        self.size = 1
        self.elements = [(int(WIDTH / 2), int(HEIGHT / 2))]
        self.dx = 0
        self.dy = 0

    def move(self):
        head = (self.elements[0][0] + self.dx, self.elements[0][1] + self.dy)
        self.elements.insert(0, head)
        if len(self.elements) > self.size:
            self.elements.pop()

    def add_segment(self):
        self.size += 1

# 食べ物のクラス定義
class Food:
    def __init__(self):
        self.position = (random.randint(0, WIDTH - 10) // 10 * 10, random.randint(0, HEIGHT - 10) // 10 * 10)

    def respawn(self):
        self.position = (random.randint(0, WIDTH - 10) // 10 * 10, random.randint(0, HEIGHT - 10) // 10 * 10)

# ゲームのメインループ
snake = Snake()
food = Food()
running = True
game_over = False
score = 0

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if not game_over:
                if event.key == pygame.K_UP and snake.dy == 0:
                    snake.dx = 0
                    snake.dy = -10
                elif event.key == pygame.K_DOWN and snake.dy == 0:
                    snake.dx = 0
                    snake.dy = 10
                elif event.key == pygame.K_LEFT and snake.dx == 0:
                    snake.dx = -10
                    snake.dy = 0
                elif event.key == pygame.K_RIGHT and snake.dx == 0:
                    snake.dx = 10
                    snake.dy = 0
            else:
                if event.key == pygame.K_RETURN:
                    game_over = False
                    score = 0
                    snake = Snake()
                    food = Food()

    if not game_over:
        screen.fill(BLACK)
        for segment in snake.elements:
            pygame.draw.rect(screen, GREEN, (segment[0], segment[1], 10, 10))
        pygame.draw.rect(screen, RED, (food.position[0], food.position[1], 10, 10))

        snake.move()
        if snake.elements[0] == food.position:
            snake.add_segment()
            score += 1
            food.respawn()

        for segment in snake.elements[1:]:
            if segment == snake.elements[0]:
                continue
            if segment[0] == snake.elements[0][0] and segment[1] == snake.elements[0][1]:
                game_over = True

        pygame.draw.rect(screen, WHITE, (0, 0, WIDTH, HEIGHT), 1)
        font = pygame.font.Font(None, 36)
        text = font.render("Score: " + str(score), True, WHITE)
        screen.blit(text, (10, 10))
    else:
        font = pygame.font.Font(None, 72)
        text = font.render("Game Over", True, RED)
        screen.blit(text, (WIDTH // 2 - 130, HEIGHT // 2 - 36))
        text = font.render("Press Enter to Restart", True, WHITE)
        screen.blit(text, (WIDTH // 2 - 190, HEIGHT // 2 + 36))

    pygame.display.update()
    clock.tick(FPS)

pygame.quit()

Continueプラグインで生成されたこのコードは、スムーズに動作し、クラシックなスネークゲームを実現しています。以下のコマンドを使用して実行します:

python deepseek_coder_snake.py

以下は、実行中のゲームの動画です:

4. 性能評価

4.1 コード生成能力

DeepSeek-Coder-V2は、優れたコード生成能力を持っています。Pygameを使用したスネークゲームのコード生成テストにおいて、DeepSeek-Coder-V2は正確かつ効率的なコードを生成し、モデルの高い理解力と適応性を示しました。他のソースコード生成課題を試したところでも、正確で質の高い成果物を得られ、その性能に驚きました。

4.2 応答速度

DeepSeek-Coder-V2の応答速度も優れています。ローカルマシン上での実行において、最初のコード生成には20〜30秒程度かかることがありますが、これはマシンの構成が強力でないため、GPUを使用していないことが原因です。しかし、その後のコード生成は連続的に高速に行われ、生成されるコードの品質も高いです。GitHub Copilotと比較して待ち時間が20秒前後遅いと感じましたが、DeepSeek-Coder-V2の応答速度は悪くないレベルであり、無料ソリューションとして非常に満足のいくパフォーマンスを発揮します。

4.3 使いやすさ

DeepSeek-Coder-V2は、その直感的なインターフェースとVSCodeとのスムーズな統合により、非常に使いやすいです。Continue.devプラグインとの組み合わせで簡単にセットアップでき、コーディングの生産性を大幅に向上させることができます。GitHub Copilotの代替として、優れた選択肢となります。

5. まとめ

DeepSeek-Coder-V2は、非常に優れたオープンソースのコード言語モデルであり、GPT-4 Turboや他のクローズドソースモデルを凌駕する性能を持っています。高いコード生成能力、迅速な応答速度、使いやすいインターフェースにより、開発者にとって価値のあるツールです。

6. 参考文献とリンク

7. 宣伝

次世代システム研究室では、最新のテクノロジーを調査・検証しながら、様々なインターネットアプリケーションの開発を行うアーキテクトを募集しています。興味のある方は、こちらからご応募ください。

  • Twitter
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ