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.

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.

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.

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.


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.