Lewati ke konten utama

Tutorial DeepSeek-Coder-V2: Contoh, Instalasi, Tolok Ukur

DeepSeek-Coder-V2 adalah model bahasa kode open-source yang menandingi performa GPT-4, Gemini 1.5 Pro, Claude 3 Opus, Llama 3 70B, atau Codestral.
· 8 mnt Baca

Jelajahi bersama AI

Seiring asisten coding AI seperti GitHub Copilot semakin populer di kalangan developer, alternatif open-source juga mulai bermunculan.

Salah satu contohnya yang menonjol adalah DeepSeek-Coder-V2, model open-source yang tangguh dengan memanfaatkan teknik machine learning tingkat lanjut. Ini dirancang khusus untuk tugas-tugas terkait kode, menawarkan performa yang sebanding dengan GPT-4 dalam pembuatan, pelengkapan, dan pemahaman kode.

Dalam artikel ini, saya akan menjelaskan fitur dan kapabilitas DeepSeek-Coder-V2 serta memandu Anda untuk memulai menggunakan alat ini.

Apa itu DeepSeek-Coder-V2?

DeepSeek-Coder-V2 adalah model bahasa kode Mixture-of-Experts (MoE) open-source yang menandingi performa GPT-4 pada tugas-tugas khusus kode. Dirancang untuk membantu developer, model ini menghadirkan beberapa fitur utama:

  • Multibahasa: Dilatih pada kode dan bahasa alami dalam berbagai bahasa, termasuk bahasa Inggris dan Mandarin, sehingga serbaguna untuk tim pengembangan global.
  • Serbaguna: Mendukung lebih dari 338 bahasa pemrograman, memenuhi beragam lingkungan dan kebutuhan coding.
  • Skala besar: Di-pre-train pada triliunan token data kode dan teks, yang meningkatkan kemampuan pemahaman dan generasi dalam berbagai skenario coding.
  • Beragam ukuran: Model tersedia dalam beberapa ukuran, memungkinkan developer memilih ukuran yang paling sesuai dengan sumber daya komputasi dan kebutuhan proyek mereka.

Anda dapat mengakses model di situs DeepSeek; mereka menawarkan akses API berbayar dan chat. Kode sumber tersedia di GitHub dan makalah risetnya tersedia di arXiv.

Model di-host di Huggingface—namun, Anda memerlukan perangkat keras kelas riset untuk menjalankan model secara lokal karena ukurannya.

Tolok Ukur DeepSeek-Coder-V2

Mari kita lihat seberapa baik DeepSeek-Coder-V2 pada berbagai tolok ukur dan bagaimana perbandingannya dengan model seperti GPT-4 Turbo, Gemini 1.5 Pro, Claude 3 Opus, LLaMA 3-70B, dan Codestral.

Sumber: Qihao Zhu dkk.

HumanEval

Tolok ukur HumanEval mengukur kemahiran pembuatan kode dengan mengevaluasi apakah kode yang dihasilkan lulus unit test tertentu. DeepSeek-Coder-V2 menunjukkan performa luar biasa pada tolok ukur ini, mencapai akurasi 90,2%. Hasil ini menegaskan kemampuan model untuk menghasilkan potongan kode yang fungsional dan akurat, bahkan dalam skenario kompleks.

MBPP+

Tolok ukur MBPP+ berfokus pada pemahaman kode, menilai kemampuan model untuk memahami dan menafsirkan struktur serta semantik kode. DeepSeek-Coder-V2 kembali unggul di area ini, mencapai akurasi 76,2%, menyoroti pemahaman yang kuat atas makna dan fungsi kode.

MATH

Tolok ukur MATH menguji kemampuan penalaran matematis model dalam kode. DeepSeek-Coder-V2 mempertahankan keunggulannya dengan akurasi 75,7%, menunjukkan kemahiran dalam menangani operasi matematika dan logika yang tertanam dalam kode—aspek krusial dari banyak tugas pemrograman.

GSM8K

Tolok ukur GSM8K berfokus pada penyelesaian soal cerita matematika tingkat sekolah dasar, mengevaluasi keterampilan pemecahan masalah yang lebih luas di luar pembuatan kode murni. DeepSeek-Coder-V2 berada tepat di belakang Claude 3 Opus dengan akurasi 94,9%, menunjukkan kemampuannya memahami dan menyelesaikan masalah matematika yang disajikan dalam bahasa alami.

Aider

Tolok ukur Aider mengevaluasi kemampuan model untuk memberikan bantuan dan saran kode. DeepSeek-Coder-V2 memimpin dengan akurasi 73,7%, menunjukkan potensinya sebagai alat berharga bagi developer yang membutuhkan panduan dan dukungan waktu nyata saat coding.

LiveCodeBench

Tolok ukur LiveCodeBench mengukur performa pembuatan kode dalam skenario dunia nyata. DeepSeek-Coder-V2 mencapai akurasi 43,4% (kedua setelah GPT-4-Turbo-0409), menunjukkan kemampuannya menghasilkan kode yang fungsional dan dapat digunakan dalam konteks praktis.

Tolok Ukur SWE Bench

​​Tolok ukur SWE-Bench secara khusus mengevaluasi model AI pada kemampuannya melakukan tugas rekayasa perangkat lunak, seperti pembuatan kode, debugging, dan memahami konsep pemrograman yang kompleks. Dalam konteks ini, DeepSeek-Coder-V2 meraih skor 12,7, menunjukkan performa solid namun belum terdepan. Model ini berada di belakang GPT-4-Turbo-0409 (18,7) dan Gemini-1.5-Pro (18,3), yang menunjukkan kapabilitas lebih unggul pada tugas-tugas tersebut. Namun, DeepSeek-Coder-V2 tetap melampaui model seperti Claude-3-Opus (11,7), Llama-3-70B (2,7), dan Codestral, yang mengindikasikan model ini andal tetapi belum kelas atas untuk aplikasi rekayasa perangkat lunak berdasarkan tolok ukur ini.

Cara Kerja DeepSeek-Coder-V2

DeepSeek-Coder-V2 dibangun di atas fondasi model DeepSeek-V2, memanfaatkan arsitektur Mixture-of-Experts (MoE) yang canggih untuk mencapai performa tinggi pada tugas-tugas khusus kode. Model ini menggunakan banyak model pakar, masing-masing mengkhususkan diri pada tugas coding yang berbeda, dan secara dinamis memilih pakar yang paling relevan berdasarkan input kode. Pendekatan ini meningkatkan efisiensi dan akurasi model.

Proses pelatihan DeepSeek-Coder-V2 melibatkan beberapa komponen penting. Model ini di-pre-train pada kumpulan data komprehensif yang terdiri dari 60% kode sumber, 10% korpus matematika, dan 30% korpus bahasa alami, total 10,2 triliun token. Kumpulan data yang beragam ini memungkinkan model memahami dan menghasilkan kode secara efektif. Dataset kode sumber mencakup 1.170 miliar token yang bersumber dari GitHub dan CommonCrawl, meliputi 338 bahasa pemrograman—peningkatan signifikan dari model sebelumnya.

DeepSeek-Coder-V2 features

Setelah pre-train, model menjalani fine-tuning dengan dataset instruksi khusus yang mencakup instruksi pengkodean, matematika, dan bahasa umum. Proses ini meningkatkan respons model terhadap prompt bahasa alami yang mengubah model menjadi asisten yang berguna.

Bagi yang tertarik pada arsitektur dasarnya, model DeepSeek-V2, yang menjadi dasar DeepSeek-Coder-V2, memperkenalkan inovasi seperti Multi-head Latent Attention (MLA) dan kerangka DeepSeekMoE. Inovasi ini berkontribusi pada inferensi yang efisien dan pelatihan yang ekonomis, sebagaimana dirinci dalam makalah DeepSeek-V2 yang tersedia di arXiv.

Memulai dengan DeepSeek-Coder-V2

Ada beberapa cara untuk mulai menggunakan model DeepSeek-Coder-V2. Anda dapat menjalankan model secara lokal dengan mengaksesnya melalui transformers library milik Hugging Face. Namun, perlu diketahui bahwa model ini cukup besar dan memerlukan sumber daya komputasi yang signifikan.

Sebagai alternatif, DeepSeek menawarkan API berbayar dan antarmuka chat online yang mirip ChatGPT. Chat online DeepSeek juga dapat menjalankan kode HTML dan JavaScript langsung di jendela chat! Fitur ini cukup inovatif—saya baru melihat hal serupa pada Artifacts dari model Claude 3.5 Sonnet. Untuk artikel ini, kita akan menggunakan fitur chat untuk contoh-contohnya.

DeepSeek-Coder-V2: Contoh Penggunaan

Untuk contoh pertama, saya meminta model memprogram Conway’s Game of Life dalam HTML dan JavaScript. Saya memberi prompt berikut: “Bisakah Anda menulis Conway’s Game of Life dalam HTML?” Berikut tanggapannya:

Certainly! Below is a simple implementation of Conway's Game of Life using HTML, CSS, and JavaScript. This version will display the grid in an HTML table and update it every second.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Conway's Game of Life</title>
    <style>
        table {
            border-collapse: collapse;
        }
        td {
            width: 10px;
            height: 10px;
            border: 1px solid #ccc;
        }
        .alive {
            background-color: black;
        }
        .dead {
            background-color: white;
        }
    </style>
</head>
<body>
    <h1>Conway's Game of Life</h1>
    <table id="grid"></table>
    <script>
        const N = 50; // Grid size
        let grid = createGrid(N);
        let intervalId;
        function createGrid(N) {
            let grid = new Array(N);
            for (let i = 0; i < N; i++) {
                grid[i] = new Array(N);
                for (let j = 0; j < N; j++) {
                    grid[i][j] = Math.random() > 0.7 ? 1 : 0;
                }
            }
            return grid;
        }
        function renderGrid(grid) {
            const table = document.getElementById('grid');
            table.innerHTML = '';
            for (let i = 0; i < N; i++) {
                const row = table.insertRow();
                for (let j = 0; j < N; j++) {
                    const cell = row.insertCell();
                    cell.classList.add(grid[i][j] ? 'alive' : 'dead');
                }
            }
        }
        function updateGrid(grid) {
            const newGrid = grid.map(row => row.slice());
            for (let i = 0; i < N; i++) {
                for (let j = 0; j < N; j++) {
                    const aliveNeighbors = countAliveNeighbors(grid, i, j);
                    if (grid[i][j] === 1) {
                        newGrid[i][j] = aliveNeighbors === 2 || aliveNeighbors === 3 ? 1 : 0;
                    } else {
                        newGrid[i][j] = aliveNeighbors === 3 ? 1 : 0;
                    }
                }
            }
            return newGrid;
        }
        function countAliveNeighbors(grid, x, y) {
            let count = 0;
            for (let i = -1; i <= 1; i++) {
                for (let j = -1; j <= 1; j++) {
                    if (i === 0 && j === 0) continue;
                    const newX = (x + i + N) % N;
                    const newY = (y + j + N) % N;
                    count += grid[newX][newY];
                }
            }
            return count;
        }
        function startGame() {
            intervalId = setInterval(() => {
                grid = updateGrid(grid);
                renderGrid(grid);
            }, 1000);
        }
        renderGrid(grid);
        startGame();
    </script>
</body>
</html>

Kita juga dapat mengklik tombol “Run HTML” di akhir respons untuk menjalankan Game of Life langsung di jendela chat.

Antarmuka chat Deepseek memungkinkan menjalankan HTML dan JavaScript

Tangkapan layar oleh penulis.

Selanjutnya, saya meminta model membuat situs web dinamis untuk gim tersebut di mana saya dapat memilih konfigurasi papan awal. Inilah hasilnya, dan berjalan cukup mulus.

Situs web Game of Life dinamis.

Tangkapan layar oleh penulis.

Untuk contoh terakhir, saya menguji model pada masalah sulit Project Euler—masalah “jumping frog”. Berikut adalah kode yang dihasilkan model:

import numpy as np

MOD = 10**9


def matrix_power(matrix, n):
    result = np.identity(len(matrix), dtype=int)

    while n > 0:
        if n % 2 == 1:
            result = np.dot(result, matrix) % MOD

        matrix = np.dot(matrix, matrix) % MOD
        n //= 2

    return result


def fib_matrix(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1

    A = np.array([[1, 1, 1], [1, 0, 0], [0, 1, 0]], dtype=int)
    A_power = matrix_power(A, n - 3)
    initial_vector = np.array([2, 1, 1])

    return np.dot(A_power, initial_vector)[0] % MOD


def S(L):
    result = 0

    for n in range(1, L + 1):
        f_n = fib_matrix(n)
        result = (result + f_n**3) % MOD

    return result


# Compute S(10**14) % 10**9
print(S(10**14))

Skrip ini akan memakan waktu sangat lama untuk dijalankan, jadi saya meminta model untuk mengoptimalkannya dan mendapatkan keluaran berikut:

import numpy as np

MOD = 10**9


def matrix_power(matrix, n):
    result = np.identity(len(matrix), dtype=int)

    while n > 0:
        if n % 2 == 1:
            result = np.dot(result, matrix) % MOD
        matrix = np.dot(matrix, matrix) % MOD
        n //= 2

    return result


def fib_matrix(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1

    A = np.array([[1, 1, 1], [1, 0, 0], [0, 1, 0]], dtype=int)
    A_power = matrix_power(A, n - 3)
    initial_vector = np.array([2, 1, 1])

    return np.dot(A_power, initial_vector)[0] % MOD


def find_pisano_period(m):
    previous, current = 0, 1
    for i in range(m * m):
        previous, current = current, (previous + current) % m
        if previous == 0 and current == 1:
            return i + 1


def S(L):
    pisano_period = find_pisano_period(MOD)
    period_sum = 0

    for n in range(1, pisano_period + 1):
        f_n = fib_matrix(n)
        period_sum = (period_sum + f_n**3) % MOD

    full_periods, remainder = divmod(L, pisano_period)
    result = (full_periods * period_sum) % MOD

    for n in range(1, remainder + 1):
        f_n = fib_matrix(n)
        result = (result + f_n**3) % MOD

    return result


# Compute S(10**14) % 10**9
print(S(10**14))

Saya membiarkan kode yang dioptimalkan berjalan selama setengah jam, tetapi tetap belum menghasilkan hasil. Walau menurut saya solusinya benar, tantangannya ada pada pengoptimalan kode. Mengingat hanya 328 orang yang berhasil menyelesaikan masalah ini, tidak mengherankan jika model pun tidak dapat menyelesaikannya.

Kesimpulan

DeepSeek-Coder-V2 adalah tambahan yang patut dicatat dalam bidang asisten coding open-source yang terus berkembang, menunjukkan performa yang kompetitif dengan model kepemilikan yang sudah mapan.

Untuk memaksimalkan DeepSeek-Coder-V2, ikuti praktik terbaik dengan memberikan prompt yang jelas dan spesifik. Saya juga mendorong Anda untuk memberikan umpan balik kepada pengembang jika menemukan bug.

Jika Anda ingin mempelajari lebih lanjut tentang asisten coding AI, saya sarankan mendengarkan podcast DataFramed ini: The Future of Programming with Kyle Daigle, COO at GitHub.

Dimitri Didmanidze

Penulis

Dimitri Didmanidze

Saya Dimitri Didmanidze, seorang ilmuwan data yang saat ini menempuh pendidikan Magister Matematika dengan fokus pada Machine Learning. Perjalanan akademis saya juga mencakup riset tentang kapabilitas model berbasis transformer dan mengajar di tingkat universitas, yang memperkaya pemahaman saya tentang konsep teoretis yang kompleks. Saya juga pernah bekerja di industri perbankan, di mana saya menerapkan prinsip-prinsip ini untuk mengatasi tantangan data di dunia nyata.

Topik

Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

blogs

Tutorial Korelasi di R