DeepSeek-Coder-V2 Nedir?
DeepSeek-Coder-V2, kod odaklı görevlerde GPT-4 ile yarışan açık kaynaklı bir Uzman Karışımı (MoE) kod dili modelidir. Geliştiricilere yardımcı olmak üzere tasarlanan bu model, şu temel özellikleri sunar:
- Çok dilli: İngilizce ve Çince dahil birden çok dilde hem kod hem doğal dil üzerinde eğitilmiştir; bu da onu küresel geliştirme ekipleri için çok yönlü kılar.
- Çok yönlü: 338'den fazla programlama dilini destekleyerek farklı kodlama ortamları ve ihtiyaçlarına hitap eder.
- Büyük ölçek: Trilyonlarca token içeren kod ve metin verisi üzerinde ön eğitimden geçirilmiştir; bu da farklı kodlama senaryolarında anlama ve üretim yeteneklerini güçlendirir.
- Birden çok boyut: Modeller birden çok boyutta sunulur; böylece geliştiriciler hesaplama kaynaklarına ve proje gereksinimlerine en uygun boyutu seçebilir.
Modele DeepSeek'in web sitesi üzerinden erişebilirsiniz; ücretli bir API erişimi ve sohbet sunuyorlar. Kaynak kodu GitHub’da, araştırma makalesi ise arXiv’de yer alıyor.
Modeller Huggingface üzerinde barındırılıyor—ancak boyutları nedeniyle modelleri yerelde çalıştırmak için araştırma düzeyinde donanıma ihtiyaç var.
DeepSeek-Coder-V2 Karşılaştırmaları
DeepSeek-Coder-V2'nin karşılaştırmalardaki performansına ve GPT-4 Turbo, Gemini 1.5 Pro, Claude 3 Opus, LLaMA 3-70B ve Codestral gibi modellere kıyasla nerede durduğuna bakalım.

Kaynak: Qihao Zhu ve diğ.
HumanEval
HumanEval kıyaslaması, üretilen kodun belirli birim testlerini geçip geçmediğini değerlendirerek kod üretme yeterliliğini ölçer. DeepSeek-Coder-V2 bu kıyaslamada olağanüstü bir performans sergileyerek %90,2 doğruluk elde ediyor. Bu sonuç, modelin karmaşık senaryolarda bile işlevsel ve doğru kod parçacıkları üretebildiğini gösteriyor.
MBPP+
MBPP+ kıyaslaması, bir modelin kod yapıları ve anlambilimini anlama ve yorumlama yeteneğini değerlendirerek kod kavrayışına odaklanır. DeepSeek-Coder-V2 bu alanda da %76,2 doğrulukla öne çıkarak kodun anlamı ve işlevselliğine güçlü bir hâkimiyet sergiliyor.
MATH
MATH kıyaslaması, bir modelin kod içindeki matematiksel akıl yürütme yeteneklerini test eder. DeepSeek-Coder-V2, %75,7 doğrulukla liderliğini sürdürerek kodda yer alan matematiksel işlemler ve mantığı ele alma becerisini gösteriyor; bu, birçok programlama görevinin kritik bir yönüdür.
GSM8K
GSM8K kıyaslaması, ilkokul düzeyindeki sözel matematik problemlerinin çözümüne odaklanır ve modelin yalnızca kod üretiminin ötesindeki genel problem çözme becerilerini değerlendirir. DeepSeek-Coder-V2, %94,9 doğrulukla Claude 3 Opus'un hemen arkasında gelerek, doğal dilde sunulan matematik problemlerini anlama ve çözme yeteneğini gösteriyor.
Aider
Aider kıyaslaması, bir modelin kod yardımı ve önerileri sağlama becerisini değerlendirir. DeepSeek-Coder-V2 %73,7 doğrulukla liderlik ederek, kodlama görevleri sırasında gerçek zamanlı yönlendirme ve destek arayan geliştiriciler için değerli bir araç potansiyeline işaret ediyor.
LiveCodeBench
LiveCodeBench kıyaslaması, gerçek dünya senaryolarında kod üretim performansını ölçer. DeepSeek-Coder-V2 %43,4 doğruluğa ulaşıyor (GPT-4-Turbo-0409’dan sonra ikinci), pratik bağlamlarda işlevsel ve kullanılabilir kod üretebildiğini gösteriyor.
SWE Bench Kıyaslaması
SWE-Bench kıyaslaması, AI modellerini özellikle kod üretimi, hata ayıklama ve karmaşık programlama kavramlarını anlama gibi yazılım mühendisliği görevlerini yerine getirme becerileri açısından değerlendirir. Bu bağlamda DeepSeek-Coder-V2, 12,7 puan alarak sağlam ancak lider olmayan bir performans sergilemiştir. GPT-4-Turbo-0409 (18,7) ve Gemini-1.5-Pro'nun (18,3) gerisinde kalırken; Claude-3-Opus (11,7), Llama-3-70B (2,7) ve Codestral gibi modelleri geride bırakmıştır. Bu da söz konusu kıyaslamaya göre yazılım mühendisliği uygulamaları için güvenilir ancak en üst seviye olmayan bir seçenek olduğunu düşündürmektedir.
DeepSeek-Coder-V2 Nasıl Çalışır
DeepSeek-Coder-V2, DeepSeek-V2 modelinin temeli üzerine inşa edilmiştir ve kod odaklı görevlerde yüksek performans elde etmek için sofistike bir Uzman Karışımı (MoE) mimarisi kullanır. Bu model, her biri farklı kodlama görevlerinde uzmanlaşmış birden fazla uzman modeli kaldıraç olarak kullanır ve girdi koda göre dinamik olarak en ilgili uzmanı seçer. Bu yaklaşım, modelin verimliliğini ve doğruluğunu artırır.
DeepSeek-Coder-V2'nin eğitim süreci birkaç kritik bileşen içerir. Toplam 10,2 trilyon token içeren ve %60 kaynak kodu, %10 matematik derlemesi ve %30 doğal dil derlemesinden oluşan kapsamlı bir veri kümesi üzerinde ön eğitimden geçirilmiştir. Bu çeşitli veri kümesi, modelin kodu etkili bir şekilde anlamasını ve üretmesini sağlar. Kaynak kodu veri kümesi, GitHub ve CommonCrawl kaynaklı 1.170 milyar token içerir ve önceki modellere göre önemli bir genişleme ile 338 programlama dilini kapsar.

Ön eğitimin ardından model, kodlama, matematiksel ve genel dil yönergelerini içeren özel bir talimat veri kümesiyle ince ayar sürecinden geçer. Bu süreç, modelin doğal dil istemlerine verdiği yanıtları iyileştirerek onu kullanışlı bir asistana dönüştürür.
Altyapı ile ilgilenenler için, DeepSeek-Coder-V2'nin temel aldığı DeepSeek-V2 modeli, Çok başlı Gizil Dikkat (MLA) ve DeepSeekMoE çerçevesi gibi yenilikler sunar. Bu yenilikler, arXiv’de yer alan DeepSeek-V2 makalesinde ayrıntılandırıldığı üzere verimli çıkarım ve ekonomik eğitim sağlar.
DeepSeek-Coder-V2 ile Başlarken
DeepSeek-Coder-V2 modelini kullanmaya başlamanın birkaç yolu var. Modeli Hugging Face’in transformers kütüphanesi aracılığıyla erişip yerelde çalıştırabilirsiniz. Ancak, modellerin oldukça büyük olduğunu ve ciddi hesaplama kaynakları gerektirdiğini unutmayın.
Alternatif olarak DeepSeek, ChatGPT’ye benzer ücretli bir API ve çevrimiçi sohbet arayüzü sunuyor. DeepSeek’in çevrimiçi sohbeti, HTML ve JavaScript kodunu doğrudan sohbet penceresinde de çalıştırabiliyor! Bu özellik oldukça yenilikçi—benzerini yalnızca Artifacts özelliğinde, Claude 3.5 Sonnet modelinde görmüştüm. Bu yazı için örneklerimizde sohbet özelliğini kullanacağız.
DeepSeek-Coder-V2: Örnek Kullanım
İlk örnek için, modelden Conway’in yaşam oyununu HTML ve JavaScript ile programlamasını istiyorum. Modele şu istemi verdim: “Conway’in yaşam oyununu HTML’de yazabilir misin?” İşte yanıtı:
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>
Yanıtın sonunda yer alan “Run HTML” düğmesine tıklayarak yaşam oyununu doğrudan sohbet penceremizde de çalıştırabiliriz.

Ekran görüntüsü: yazar.
Sonrasında, başlangıç tahtası yapılandırmasını seçebileceğim dinamik bir web sitesi oluşturmasını istedim. Ortaya çıkan sonuç bu şekilde ve oldukça sorunsuz çalışıyor.

Ekran görüntüsü: yazar.
Son örneğimiz için, modeli zor bir Project Euler problemi—“zıplayan kurbağa” problemi—üzerinde denedim. İşte modelin ürettiği kod:
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))
Bu betik çalıştırmak için çok uzun zaman alacağından, modelden optimize etmesini istedim ve şu çıktıyı aldım:
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))
Optimize edilmiş kodu yarım saat çalıştırdım ancak yine de sonuç üretmedi. Çözümlerin doğru olduğunu düşünsem de asıl zorluk kodu optimize etmekte yatıyor. Bu problemi yalnızca 328 kişinin çözebilmiş olması göz önüne alındığında, modelin bunu başaramaması şaşırtıcı değil.
Sonuç
DeepSeek-Coder-V2, açık kaynaklı kod asistanları alanına dikkat çekici bir katkı sunuyor ve yerleşik tescilli modellerle rekabetçi bir performans sergiliyor.
To get the most out of DeepSeek-Coder-V2, follow best practices by providing clear, specific prompts. I also encourage you to provide feedback to the developers if you encounter any bugs.
If we want to learn more about AI coding assistants, I recommend listening to this DataFramed podcast: The Future of Programming with Kyle Daigle, COO at GitHub.


Geliştiriciler arasında GitHub Copilot gibi yapay zekâ kod asistanları popülerlik kazanırken, açık kaynaklı alternatifler de ortaya çıkıyor.
Dikkate değer örneklerden biri, gelişmiş makine öğrenmesi tekniklerini kullanan güçlü bir açık kaynaklı model olan DeepSeek-Coder-V2, a robust open-source model utilizing advanced machine learning techniques. It’s designed specifically for code-related tasks, offering performance comparable to GPT-4 in code generation, completion, and comprehension.
Bu yazıda, DeepSeek-Coder-V2'nin özelliklerini ve yeteneklerini açıklayacak ve bu araca nasıl başlayacağınızı anlatacağım.