KO ▾
API 키 받기

uncensoredlocalllm.com가이드

Python 코딩용 최고의 로컬 LLM: 로컬 또는 호스팅 API?

단일 우승자는 없습니다. 최선의 선택은 GPU, 작업 및 모델이 거절하는 빈도에 따라 달라지기 때문입니다. 여기에서 결정하는 방법과 로컬 하드웨어가 부족할 때 호스팅 옵션을 테스트하는 방법을 알아보세요.

업데이트

로컬 GPU가 호스팅 클라우드에 연결된 등축측 일러스트. 로컬과 API 코딩 모델을 대비합니다.

주요 포인트

  • Python 버전, 라이브러리, 리포지토리 크기 및 테스트 처리 방식을 포함하여 자체 작업에서 코딩 모델을 평가하세요.
  • GPU 메모리는 로컬 모델의 한계를 결정합니다. 4비트에서는 가중치에 파라미터당 약 0.5바이트가 필요하며, 컨텍스트 창을 위한 여유 공간도 필요합니다.
  • 이 사이트는 로컬 런타임이 아닌 호스팅 API입니다. 100,000토큰 컨텍스트 창을 제공하며 토큰 100만 개당 $0.15 및 $0.50입니다.
  • 작은 테스트 스위트와 체험 키는 어떤 리더보드보다 더 많은 정보를 알려줄 것입니다.

모델 이름이 아닌 제약 사항으로 시작하세요

질문 Python 코딩용 최고의 로컬 LLM에는 고정된 답이 없습니다. 모델은 빠르게 변화하며 실제 제한 요소는 여러분의 머신이기 때문입니다. 이름을 비교하기 전에 다음 네 가지를 적어보세요:

  • GPU 메모리. 이는 실행할 수 있는 모델 크기를 결정합니다.
  • 컨텍스트 필요량. 하나의 함수를 수정하는 것과 전체 패키지를 추론하는 것은 다릅니다.
  • 프라이버시 규칙. 일부 코드는 머신 밖으로 나가서는 안 되며, 이는 로컬에 머무르는 정당한 이유가 됩니다.
  • 거절 내성. 보안 도구, 스크레이퍼, 리버스 엔지니어링 및 퍼저는 심하게 필터링된 모델에서 거절을 유발할 수 있습니다.

엄격한 오프라인 작업이 필수 요구사항이라면 직접 실행할 수 있는 모델이 필요합니다. 그렇지 않다면 호스팅 API는 하드웨어 문제를 제거합니다. 이 사이트는 두 번째 그룹에 속합니다: 로컬 런타임이 아닌 호스팅 OpenAI 호환 API이며 로컬 설정과 함께 테스트할 가치가 있습니다.

필요한 GPU 메모리 양

가중치에 대한 대략적인 규칙: 파라미터 수 × 파라미터당 바이트 수입니다. 16비트 정밀도에서는 파라미터당 2바이트, 8비트에서는 1바이트, 4비트에서는 약 0.5바이트입니다.

모델 크기16비트8비트4비트
7B14GB7GB3.5GB
14B28GB14GB7GB
32B64GB32GB16GB

이 수치는 가중치만 포함합니다. 프롬프트에 따라 증가하는 컨텍스트 캐시와 런타임 자체를 위한 메모리도 필요합니다. 여유 공간으로 몇 기가바이트를 확보하고, 큰 파일을 붙여넣을 계획이라면 더 많은 공간을 남겨두세요. 더 높은 양자화는 메모리를 절약하지만 정확도를 잃을 수 있으며, 이는 한 문자의 오류로 프로그램이 깨지는 코드에서 중요합니다.

코딩 모델을 공정하게 비교하는 방법

공개 리더보드는 타인의 작업을 측정합니다. 더 나은 방법은 1시간이 소요되며 자체 코드를 사용합니다.

  1. 실제 작업 15~20개를 수집하세요: 실패하는 테스트가 있는 버그, docstring에서 작성할 함수, 리팩토링, 타입 힌트 추가 요청 등입니다.
  2. 지원되는 경우 동일한 시드로 각 모델을 동일한 프롬프트, 동일한 temperature(코드용 0.2가 적절함)로 실행하세요.
  3. 답을 읽는 것이 아니라 테스트를 실행하여 점수를 매기세요. 실제 모듈을 가져왔습니까? 테스트를 통과했습니까?
  4. 거절 여부를 별도로 기록하세요. 코드에서는 5% 더 우수하지만 포트 스캐너 작업을 거절하는 모델은 여러분에게 더 나쁩니다.
  5. 작업당 시간과 호스팅 모델의 경우 작업당 비용을 기록하세요.

새로운 모델이 나타날 때 다시 실행할 수 있도록 하니스를 파일에 보관하세요. 이러한 재사용은 어떤 단일 결과보다 가치가 있습니다.

동일한 작업에서 호스팅 옵션 테스트

API는 OpenAI 호환이므로 하니스에는 다른 Base URL만 필요합니다. 이 스크립트는 함수를 요청하고 첫 번째 Python 블록을 추출하여 테스트로 실행합니다. 모델 ID는 uncensored입니다.

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())

로컬 모델에 동일한 작업 목록을 실행하고 통과율을 비교하세요. 코드는 생성된 출력을 실행하므로 토이 예제 이상의 경우 임시 디렉토리 또는 컨테이너를 사용하세요.

호스팅 모델이 Python 개발자에게 도움이 되는 경우

호스팅된 엔드포인트가 모든 경우에 더 나은 것은 아니지만, 몇 가지 작업에는 잘 맞습니다:

  • 긴 컨텍스트 창. 컨텍스트 창은 100,000 토큰이며, 프롬프트와 응답을 모두 포함합니다. 이는 하나의 요청으로 큰 모듈, 테스트, 스택 트레이스를 모두 담기에 충분합니다.
  • 도구 호출. run_tests 또는 read_file와 같은 도구를 정의하고 모델이 루프에서 이를 호출하게 하고 결과를 role: "tool" 메시지로 되돌려 보낼 수 있습니다.
  • JSON 모드. response_format: {"type":"json_object"}을 사용하면 줄 번호가 포함된 이슈 목록과 같은 구조화된 코드 리뷰를 받을 수 있습니다.
  • 보안 작업에서 거절 감소. 모델은 합법적인 성인 사용에 콘텐츠 거절 없이 답변하도록 튜닝되었으며, 이는 여러분이 소유하거나 테스트할 권한이 있는 시스템의 보안 테스트를 포함합니다.

대가는 명확합니다: 코드가 사용자의 머신을 떠나며 네트워크 연결이 필요합니다. 프롬프트는 학습에 사용되지 않지만, 정책상 코드를 제3자에게 보내는 것을 금지한다면 로컬 모델을 사용하세요.

함수 호출을 사용하여 모델이 테스트를 실행하도록 함

함수 호출은 일회성 응답을 루프로 바꿉니다: 모델은 테스트 실행을 요청하고, 실패를 확인한 후 코드를 수정합니다. 도구를 하나 정의하고 호출을 직접 처리하세요.

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:]})

루프는 최대 5라운드로 제한되므로 모델이 무한히 실행되지 않습니다. 도구 출력을 짧게 유지하세요. 반환하는 모든 것은 다음 라운드에서 입력으로 청구됩니다. 마지막 4,000자로 제한하면 각 턴이 저렴하게 유지됩니다.

코딩 작업의 비용

코딩 프롬프트는 입력이 많습니다: 코드를 붙여넣고 짧은 응답을 받습니다. 입력 토큰 6,000개와 출력 토큰 1,500개를 사용하는 리팩토링 요청의 경우 100만 토큰당 $0.15와 $0.50을 기준으로 계산합니다:

  • 입력: 6,000 / 1,000,000 x $0.15 = $0.0009
  • 출력: 1,500 / 1,000,000 x $0.50 = $0.00075
  • 총합: 요청당 $0.00165

이러한 요청 1,000개의 비용은 $1.65입니다. $0.50의 무료 체험 크레딧으로 약 303건의 요청을 처리할 수 있으며, 이는 20개 작업 벤치마크를 여러 번 실행하기에 충분합니다. 대량 사용 시 로컬 GPU가 요청당 비용이 더 저렴할 수 있지만, 초기 비용이 발생하며 사용하지 않을 때도 비용이 0이 되지 않습니다. 가격 책정 페이지에서 전체 표를 확인할 수 있습니다.

코드 생성을 위한 실용적인 설정

  • Temperature 0.1 ~ 0.3. 낮은 값은 지어낸 API와 무작위 스타일 변경을 줄입니다.
  • 시드 고정: 프롬프트를 비교할 때 시드를 고정하면 차이점이 샘플링이 아닌 프롬프트에서 비롯되도록 합니다.
  • 시스템 메시지에 Python 버전과 라이브러리를 명시: "Python 3.11, 표준 라이브러리만 사용"이라는 지시는 추측을 많이 줄여줍니다.
  • 코드와 함께 테스트를 요청하세요. 자체 테스트를 작성하는 모델은 테스트 실행 시 오프바이원 오류를 스스로 잡는 경우가 많습니다.
  • 오류 설명이 아닌 실제 traceback을 보내세요.

시도하려면 API 키 페이지에서 체험 크레딧을 받은 후 빠른 시작 가이드를 따르세요. 채팅 스타일 사용은 무검열 LLM 채팅 가이드를 참조하세요. 이 서비스는 합법적인 성인 사용을 위한 것이며 미성년자가 포함된 성적인 콘텐츠를 생성하지 않습니다.

코딩 모델의 일반적인 함정

  • 지어낸 import 및 함수 이름. 코드를 실행하세요. 모델은 존재하지 않는 라이브러리 메서드를 설명할 수 있으므로 테스트가 유일한 판단 기준입니다.
  • 구식 구문. 구조적 패턴 매칭과 같은 최신 기능이 필요하다면 프롬프트에서 Python 버전을 명시하세요.
  • 너무 많은 컨텍스트. 컨텍스트 창이 크다고 해서 모든 것을 붙여넣어야 하는 것은 아닙니다. 중요한 파일과 오류만 보내세요.
  • 생성된 보안 코드를 맹신하지 마세요. 인증, 암호화 또는 입력 파싱과 관련된 코드는 반드시 직접 검토하세요.
  • 출력을 맹목적으로 실행하지 마세요. 생성된 코드는 파일을 삭제하거나 네트워크 호출을 할 수 있습니다. 샌드박스를 사용하세요.

질문과 답변

Python 코딩에 가장 적합한 로컬 LLM은 무엇인가요?

GPU 메모리와 작업에 따라 다르므로, 하드웨어에 맞는 크기의 두세 가지 모델을 테스트하고 자체 코드에서 테스트를 실행하여 점수를 매겨보세요. 리더보드는 시작점일 뿐입니다.

이 사이트는 로컬 LLM인가요?

아니요. 이는 모델 ID가 uncensored인 호스팅된 OpenAI 호환 API입니다. 코드를 원격 서비스에 보낼 수 있는 경우에 적합합니다.

14B 모델에 필요한 GPU 메모리는 얼마나 되나요?

가중치만 기준으로 16비트에서 약 28GB, 8비트에서 14GB, 4비트에서 7GB가 필요하며, 컨텍스트 캐시를 위해 추가 메모리가 더 필요합니다.

기존 Python 도구에서 사용할 수 있나요?

네. Base URL을 https://api.uncensoredlocalllm.com/v1로 설정하고 키를 사용하면 모든 OpenAI SDK 또는 클라이언트가 작동합니다.

무료로 테스트하는 방법은 무엇인가요?

가입 후 API 키 페이지에서 $0.50 체험 크레딧을 받으세요. 7일 동안 유효하며 결제 정보가 필요 없고 1인당 1회로 제한됩니다.

uncensoredlocalllm.com

키는 양식 하나만 작성하면 받을 수 있습니다

계정을 생성하고 키를 복사한 후 Base URL을 변경하세요. 설정은 이것으로 끝입니다.