TR ▾
API anahtarı al

uncensoredlocalllm.comRehber

Python Kodlama İçin En İyi Yerel LLM: Yerel mi Yoksa Host Edilen API mi?

Tek bir kazanan yoktur, çünkü en iyi seçim GPU'nuz, görevleriniz ve modelin ne sıklıkla reddettiğine bağlıdır. İşte nasıl karar vereceğiniz ve yerel donanım yetersiz kaldığında host edilen bir seçeneği nasıl test edeceğiniz.

güncellendi

Yerel bir GPU'nun host edilen bir buluta bağlı olduğu, yerel ile API kodlama modellerini temsil eden izometrik bir illüstrasyon

Temel noktalar

  • Bir kodlama modelini kendi görevlerinizde değerlendirin: Python sürümü, kütüphaneler, depo boyutu ve testleri nasıl ele aldığı.
  • GPU belleği, yerel modeller için bir üst sınır belirler. 4-bit'te ağırlıklar parametre başına yaklaşık yarım bayt gerektirir; ayrıca bağlam için yer gerekir.
  • Bu site yerel bir çalışma zamanı değil, host edilen bir API'dir. 100.000 token'lık bir bağlam penceresine sahiptir ve 1M token başına $0,15 ve $0,50 maliyetindedir.
  • Küçük bir test paketi ve bir deneme anahtarı, herhangi bir liderlik tablosundan daha fazla bilgi verecektir.

Bir model adıyla değil, kısıtlamalarınızla başlayın

Python kodlaması için en iyi yerel llm sorusunun sabit bir cevabı yoktur, çünkü modeller hızla değişir ve gerçek sınır makinenizdir. İsimleri karşılaştırmadan önce dört şeyi kaydedin:

  • GPU belleği. Bu, hangi model boyutlarını tamamen çalıştırabileceğinizi belirler.
  • Bağlam ihtiyaçları. Bir işlevi düzenlemek, tüm bir pakette mantık yürütmekten farklıdır.
  • Gizlilik kuralları. Bazı kodlar makinenizden çıkamaz; bu, yerel kalmak için meşru bir nedendir.
  • Reddetme toleransı. Güvenlik araçları, scraper'lar, tersine mühendislik ve fuzzer'lar, yoğun şekilde filtrelenmiş modellerde reddetmelere neden olabilir.

Katı çevrimdışı çalışma bir zorunluluksa, kendi kendinize çalıştıracağınız bir modele ihtiyacınız vardır. Değilse, host edilen bir API donanım sorununu ortadan kaldırır. Bu site ikinci gruba aittir: yerel bir çalışma zamanı değil, OpenAI uyumlu bir API'dir ve yerel kurulumunuzun yanında test etmeye değerdir.

Ne kadar GPU belleğine ihtiyacınız olduğu

Ağırlıklar için kabaca bir kural: parametreler çarpı parametre başına bayt. 16-bit hassasiyette bu parametre başına 2 bayttır; 8-bit'te 1 bayt; 4-bit'te yaklaşık 0,5 bayt.

Model boyutu16-bit8-bit4-bit
7B14 GB7 GB3.5 GB
14B28 GB14 GB7 GB
32B64 GB32 GB16 GB

Bu sayılar yalnızca ağırlıklardır. Ayrıca, istem büyüdükçe artan bağlam önbelleği ve çalışma zamanı için belleğe de ihtiyacınız vardır. Birkaç gigabayt pay bırakın ve büyük dosyalar yapıştırmayı planlıyorsanız daha fazlasını bırakın. Daha agresif kuantizasyon bellek tasarrufu sağlar ancak bir miktar doğruluk kaybına yol açabilir; bu, tek bir yanlış karakterin programı bozduğu kodda önemlidir.

Kodlama modellerini adil şekilde nasıl karşılaştıracağınız

Halka açık liderlik tabloları başkalarının görevlerini ölçer. Daha iyi bir yöntem bir saat sürer ve kendi kodunuzu kullanır.

  1. 15 ila 20 gerçek görev toplayın: başarısız bir testle bir hata, bir docstring'den yazılacak bir fonksiyon, bir yeniden düzenleme, tür ipuçları eklemek için bir istek.
  2. Her modeli aynı istemle, aynı sıcaklıkta (kod için 0,2 mantıklı bir başlangıçtır) ve destekleniyorsa aynı seed ile çalıştırın.
  3. Cevabı okumak yerine testleri çalıştırarak puanlayın. Gerçek modülleri içe aktarıyor mu? Geçiyor mu?
  4. Reddetmeleri ayrı olarak not edin. Kodda %5 daha iyi olan ancak port tarayıcı görevinizi reddeden model sizin için daha kötüdür.
  5. Görev başına süreyi ve host edilen modeller için görev başına maliyeti kaydedin.

Yeni bir model ortaya çıktığında yeniden çalıştırabilmeniz için harness'i bir dosyada tutun. Bu yeniden kullanım, tek bir sonuçtan daha değerlidir.

Aynı görevlerde host edilen bir seçeneği test etme

API OpenAI-uyumlu olduğu için, harness'iniz yalnızca farklı bir temel URL gerektirir. Bu betik bir fonksiyon ister, ilk Python bloğunu ayıklar ve bir test üzerinde çalıştırır. Model kimliği uncensored'dir.

import re
import subprocess
import tempfile
from openai import OpenAI

client = OpenAI(base_url="https://api.uncensoredlocalllm.com/v1", api_key="YOUR_API_KEY")

TASK = "Write a Python function parse_size(text) that converts '10KB' or '2 MB' to bytes."
TEST = "assert parse_size('10KB') == 10240\nassert parse_size('2 MB') == 2 * 1024 * 1024\nprint('ok')"

r = client.chat.completions.create(
    model="uncensored",
    temperature=0.2,
    seed=7,
    messages=[
        {"role": "system", "content": "You write correct Python 3. Reply with one fenced code block and no commentary."},
        {"role": "user", "content": TASK},
    ],
)
text = r.choices[0].message.content
m = re.search(r"```(?:python)?\n(.*?)```", text, re.S)
code = m.group(1) if m else text

with tempfile.NamedTemporaryFile("w", suffix=".py", delete=False) as f:
    f.write(code + "\n" + TEST)
out = subprocess.run(["python3", f.name], capture_output=True, text=True, timeout=20)
print(out.stdout.strip() or out.stderr.strip())

Yerel modelinize karşı aynı görev listesini çalıştırın ve geçme oranlarını karşılaştırın. Kod, oluşturulan çıktıyı çalıştırdığı için, basit örneklerin ötesinde her şey için geçici bir dizin veya bir kapsayıcı kullanın.

Bir Python geliştiricisine host edilen bir modelin nasıl yardımcı olduğu

Host edilen bir uç nokta her durumda daha iyi değildir, ancak birkaç görev için uygundur:

  • Büyük bağlam penceresi. Pencere 100.000 token kapasitesindedir; hem istem hem de tamamlama bu pencereye sığar. Bu, büyük bir modülü, testlerini ve bir yığın izini tek bir istekte birleştirmenize olanak tanır.
  • Fonksiyon çağırma. run_tests veya read_file gibi araçlar tanımlayabilir ve modelin bu araçları bir döngüde çağırmasını sağlayabilirsiniz; sonuçlar role: "tool" mesajları olarak geri gönderilir.
  • JSON modu. response_format: {"type":"json_object"} ile satır numaraları içeren sorun listesi gibi yapılandırılmış bir kod incelemesi alabilirsiniz.
  • Güvenlik işlerinde daha az reddetme. Model, yasal yetişkin kullanımı için içerik reddetmeleri olmadan yanıtlamak üzere ayarlanmıştır; bu, sahip olduğunuz veya test etmeye yetkiniz olan sistemlerin güvenlik testlerini içerir.

Karşılıklı ödün açıktır: kodunuz makinenizden ayrılır ve bir ağ bağlantısına ihtiyacınız vardır. İstemler eğitim için kullanılmaz, ancak politikanız kodu herhangi bir üçüncü tarafa göndermeyi yasaklıyorsa yerel kalın.

Modelin fonksiyon çağırma ile testlerinizi çalıştırması

Fonksiyon çağırma, tek seferlik bir yanıtı bir döngüye dönüştürür: model testlerin çalıştırılmasını ister, hatayı görür ve kodu düzeltir. Bir araç tanımlayın ve çağrıyı kendiniz yönetin.

import json
import subprocess
from openai import OpenAI

client = OpenAI(base_url="https://api.uncensoredlocalllm.com/v1", api_key="YOUR_API_KEY")

tools = [{
    "type": "function",
    "function": {
        "name": "run_tests",
        "description": "Run pytest in the project and return the output",
        "parameters": {"type": "object", "properties": {}, "required": []},
    },
}]

messages = [
    {"role": "system", "content": "You fix Python bugs. Call run_tests to check your work."},
    {"role": "user", "content": "The tests in this project fail. Run them and tell me the first error."},
]

for _ in range(5):
    r = client.chat.completions.create(model="uncensored", messages=messages, tools=tools, temperature=0.2)
    msg = r.choices[0].message
    messages.append(msg)
    if not msg.tool_calls:
        print(msg.content)
        break
    for call in msg.tool_calls:
        out = subprocess.run(["pytest", "-x", "-q"], capture_output=True, text=True)
        messages.append({"role": "tool", "tool_call_id": call.id, "content": (out.stdout + out.stderr)[-4000:]})

Döngü, kafa karışıklığına uğramış bir modelin sonsuza kadar çalışmaması için beş turla sınırlıdır. Döndürdüğünüz her şey bir sonraki turda girdi olarak faturalandırıldığı için araç çıktısını kısa tutun. Bunu son 4.000 karaktere kısaltmak, her dönüşü ucuz tutar.

Kodlama işleri için maliyet

Kodlama istemleri girdi ağırlıklıdır: kodu yapıştırırsınız ve daha kısa bir yanıt alırsınız. 6.000 girdi tokeni ve 1.500 çıktı tokeni olan bir yeniden düzenleme isteğini 1M başına $0,15 ve $0,50 fiyatlarla ele alalım:

  • Girdi: 6.000 / 1.000.000 x $0,15 = $0,0009
  • Çıkış: 1.500 / 1.000.000 x $0,50 = $0,00075
  • Toplam: İstek başına $0,00165

Bin böyle istek $1,65 tutarındadır. $0,50 deneme kredisi yaklaşık 303 tanesini karşılar, bu da 20 görevlik bir benchmark'ı birkaç kez çalıştırmak için yeterlidir. Ağır hacimde yerel bir GPU istek başına daha ucuz olabilir, ancak bir ön maliyeti vardır ve kullanmadığınızda sıfıra inmez. fiyatlandırma sayfası tam tabloyu içerir.

Kod üretimi için pratik ayarlar

  • Sıcaklık 0,1 ile 0,3 arası. Daha düşük değerler uydurulmuş API'leri ve rastgele stil kaymalarını azaltır.
  • İstemleri karşılaştırırken bir seed sabitleyin, böylece farklar örneklemeden değil, istemden kaynaklansın.
  • Sistem mesajında Python sürümünü ve kütüphaneleri belirtin: "Python 3.11, yalnızca standart kütüphane" tahmin yapmayı büyük ölçüde azaltır.
  • Kodla birlikte test isteyin. Kendi testlerini yazan bir model, çalıştırdığınızda genellikle kendi off-by-one hatalarını yakalar.
  • Hata açıklamasını değil, başarısız yığın izini gönderin.

Denemek için API anahtarı sayfası üzerindeki denemeyi alın, ardından hızlı başlangıç'ı izleyin. Sohbet tarzı kullanım için sansürsüz LLM sohbet kılavuzu'na bakın. Hizmet yasal yetişkin kullanımı içindir ve reşit olmayanları içeren cinsel içerik üretmez.

Kodlama modelleri ile sık karşılaşılan hatalar

  • Uydurma içe aktarmalar ve fonksiyon adları. Kodu çalıştırın. Bir model var olmayan bir kütüphane yöntemini tarif edebilir, bu nedenle test tek yargıçtır.
  • Güncel olmayan sözdizimi. Yapısal desen eşleşmesi gibi modern özelliklere ihtiyacınız varsa, istemde Python sürümünü belirtin.
  • Çok fazla bağlam. Daha büyük bir pencere her şeyi yapıştırmanız gerektiği anlamına gelmez. Önemli dosyaları ve hatayı gönderin.
  • Üretilen güvenlik koduna güvenmek. Kimlik doğrulama, kripto veya girdi ayrıştırma ile ilgilenen her şeyi elle gözden geçirin.
  • Çıktıyı körün körüne çalıştırma. Oluşturulan kod dosyaları silebilir veya ağ bağlantısı kurabilir. Bir sandbox kullanın.

Sorular ve cevaplar

Python kodu için en iyi yerel LLM hangisidir?

GPU belleğiniz ve görevlerinize bağlıdır, bu nedenle donanımınıza uyan bir boyuttaki iki veya üç modeli kendi kodunuzda test edin ve testleri çalıştırarak puanlayın. Liderlik tabloları yalnızca bir başlangıç noktasıdır.

Bu site yerel bir LLM mi?

Hayır. Bu, uncensored model kimliğine sahip host edilen, OpenAI uyumlu bir API'dir. Kodu uzak bir servise gönderebiliyorsanız size uygundur.

14B bir model için ne kadar GPU belleğine ihtiyacım var?

Ağırlıklar için yalnızca 16-bit'te yaklaşık 28 GB, 8-bit'te 14 GB ve 4-bit'te 7 GB, ayrıca bağlam önbelleği için ek bellek gerekir.

Mevcut Python araçlarından kullanabilir miyim?

Evet. Base URL'yi https://api.uncensoredlocalllm.com/v1 olarak ayarlayıp anahtarınızı kullandıktan sonra herhangi bir OpenAI SDK'sı veya istemcisi çalışır.

Ücretsiz olarak nasıl test edebilirim?

Kayıttan sonra API anahtarı sayfasındaki $0,50 denemeyi kullanın. 7 gün geçerlidir, ödeme bilgisi gerektirmez ve kişi başı bir kezle sınırlıdır.

uncensoredlocalllm.com

Anahtarınız tek bir formun uzağında

Bir hesap oluşturun, anahtarı kopyalayın ve base URL'yi değiştirin. Kurulum bu kadar basit.