VI ▾
Lấy khóa API

uncensoredlocalllm.comHướng dẫn

LLM cục bộ tốt nhất cho lập trình Python: chạy cục bộ hay dùng API lưu trữ?

Không có một người chiến thắng duy nhất, vì lựa chọn tốt nhất phụ thuộc vào GPU của bạn, các nhiệm vụ của bạn và tần suất mô hình từ chối. Dưới đây là cách quyết định và cách kiểm tra tùy chọn lưu trữ khi phần cứng cục bộ không đủ.

Cập nhật

Minh họa đẳng hướng GPU cục bộ kết nối với đám mây lưu trữ, đại diện cho mô hình mã hóa cục bộ so với API

Điểm chính

  • Đánh giá một mô hình lập trình dựa trên các nhiệm vụ của bạn: phiên bản Python, thư viện, kích thước repo và cách nó xử lý các bài kiểm tra.
  • Bộ nhớ GPU đặt giới hạn trên cho các mô hình cục bộ. Ở chế độ 4-bit, trọng số cần khoảng nửa byte cho mỗi tham số, cộng thêm không gian cho ngữ cảnh.
  • Trang web này là một API lưu trữ, không phải môi trường chạy cục bộ. Nó có cửa sổ ngữ cảnh 100.000 token và giá $0,15 và $0,50 cho mỗi 1 triệu token.
  • Một bộ kiểm tra nhỏ và một khóa dùng thử sẽ cho bạn biết nhiều hơn bất kỳ bảng xếp hạng nào.

Bắt đầu với các ràng buộc của bạn, không phải tên mô hình

Câu hỏi LLM cục bộ tốt nhất cho Python không có câu trả lời cố định, vì các mô hình thay đổi nhanh chóng và máy của bạn là giới hạn thực sự. Trước khi so sánh tên, hãy ghi lại bốn điều:

  • Bộ nhớ GPU. Điều này quyết định kích thước mô hình nào bạn có thể chạy.
  • Nhu cầu ngữ cảnh. Chỉnh sửa một hàm khác với việc suy luận trên toàn bộ gói.
  • Quy tắc về quyền riêng tư. Một số mã không thể rời khỏi máy của bạn, đó là lý do chính đáng để ở lại cục bộ.
  • Khả năng chịu từ chối. Công cụ bảo mật, trình thu thập dữ liệu, phân tích ngược và fuzzer có thể kích hoạt từ chối trong các mô hình được lọc kỹ.

Nếu hoạt động ngoại tuyến nghiêm ngặt là yêu cầu bắt buộc, bạn cần một mô hình bạn tự chạy. Nếu không, một API lưu trữ loại bỏ câu hỏi về phần cứng. Trang web này thuộc nhóm thứ hai: nó là một API tương thích OpenAI được lưu trữ, không phải môi trường chạy cục bộ, và đáng để kiểm tra bên cạnh thiết lập cục bộ của bạn.

Bạn cần bao nhiêu bộ nhớ GPU

Một quy tắc thô cho trọng số: số tham số nhân với số byte trên mỗi tham số. Ở độ chính xác 16-bit, đó là 2 byte trên mỗi tham số; ở 8-bit, 1 byte; ở 4-bit, khoảng 0,5 byte.

Kích thước mô hình16-bit8-bit4-bit
7B14 GB7 GB3,5 GB
14B28 GB14 GB7 GB
32B64 GB32 GB16 GB

Những con số này chỉ là trọng số. Bạn cũng cần bộ nhớ cho bộ nhớ đệm ngữ cảnh, tăng lên theo prompt, và cho chính môi trường chạy. Hãy dành ra một vài gigabyte dự phòng, và nhiều hơn nếu bạn định dán các tệp lớn vào. Lượng tử hóa nặng hơn tiết kiệm bộ nhớ nhưng có thể làm giảm độ chính xác, điều này quan trọng đối với mã nơi một ký tự sai duy nhất có thể phá vỡ chương trình.

Cách so sánh các mô hình lập trình một cách công bằng

Bảng xếp hạng công cộng đo lường các nhiệm vụ của người khác. Một phương pháp tốt hơn mất một giờ và sử dụng chính mã của bạn.

  1. Thu thập 15 đến 20 tác vụ thực: một lỗi với bài kiểm tra thất bại, một hàm cần viết từ docstring, một lần tái cấu trúc, một yêu cầu thêm gợi ý kiểu.
  2. Chạy mỗi mô hình với cùng prompt, cùng nhiệt độ (0,2 là điểm khởi đầu hợp lý cho mã) và cùng seed khi được hỗ trợ.
  3. Chấm điểm bằng cách chạy các bài kiểm tra, không phải bằng cách đọc câu trả lời. Nó có nhập các mô-đun thực không? Nó có vượt qua không?
  4. Ghi lại các lần từ chối riêng biệt. Một mô hình tốt hơn 5% về mã nhưng từ chối nhiệm vụ trình quét cổng của bạn thì kém hơn đối với bạn.
  5. Ghi lại thời gian cho mỗi nhiệm vụ và, đối với các mô hình lưu trữ, chi phí cho mỗi nhiệm vụ.

Giữ bộ công cụ trong một tệp để bạn có thể chạy lại nó khi một mô hình mới xuất hiện. Việc tái sử dụng đó có giá trị hơn bất kỳ kết quả đơn lẻ nào.

Kiểm tra tùy chọn lưu trữ trên cùng các nhiệm vụ

Vì API tương thích OpenAI, bộ công cụ của bạn chỉ cần một Base URL khác. Script này yêu cầu một hàm, trích xuất khối Python đầu tiên và chạy nó với một bài kiểm tra. Model ID là 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())

Chạy danh sách tác vụ tương tự trên mô hình cục bộ của bạn và so sánh tỷ lệ vượt qua. Mã chạy đầu ra được tạo, vì vậy hãy sử dụng thư mục tạm hoặc container cho bất kỳ ví dụ nào ngoài ví dụ đơn giản.

Khi mô hình lưu trữ giúp nhà phát triển Python

Một endpoint được lưu trữ không phải lúc nào cũng tốt hơn, nhưng một số công việc phù hợp với nó:

  • Ngữ cảnh lớn. Cửa sổ ngữ cảnh là 100.000 token, bao gồm prompt và kết quả. Điều đó vừa với một mô-đun lớn, các bài kiểm tra của nó và một vết ngăn xếp trong một yêu cầu.
  • Gọi hàm. Bạn có thể định nghĩa các công cụ như run_tests hoặc read_file và để mô hình gọi chúng trong một vòng lặp, với kết quả được gửi lại dưới dạng các thông điệp role: "tool".
  • Chế độ JSON. Với response_format: {"type":"json_object"}, bạn có thể nhận được một bản đánh giá mã có cấu trúc, chẳng hạn như một danh sách các vấn đề kèm theo số dòng.
  • Ít bị từ chối hơn trong công việc bảo mật. Mô hình được tinh chỉnh để trả lời mà không có từ chối nội dung cho mục đích sử dụng người trưởng thành hợp pháp, bao gồm cả việc kiểm tra bảo mật các hệ thống bạn sở hữu hoặc được ủy quyền kiểm tra.

Sự đánh đổi rất rõ ràng: mã của bạn rời khỏi máy của bạn và bạn cần kết nối mạng. Các prompt không được sử dụng để huấn luyện, nhưng nếu chính sách của bạn cấm gửi mã cho bất kỳ bên thứ ba nào, hãy giữ cục bộ.

Để mô hình chạy các bài kiểm tra của bạn bằng cách gọi hàm

Gọi hàm biến câu trả lời một lần thành vòng lặp: mô hình yêu cầu chạy các test, thấy lỗi và sửa mã. Xác định một công cụ và tự xử lý lời gọi đó.

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

Vòng lặp được giới hạn ở năm vòng để một mô hình bị nhầm lẫn không thể chạy mãi mãi. Hãy giữ đầu ra của công cụ ngắn gọn, vì mọi thứ bạn trả về đều được tính phí là đầu vào ở vòng tiếp theo. Cắt ngắn nó xuống còn 4.000 ký tự cuối cùng giúp mỗi lượt xử lý rẻ hơn.

Chi phí cho công việc lập trình

Các prompt lập trình thường nặng về đầu vào: bạn dán mã và nhận được một câu trả lời ngắn hơn. Hãy xem xét một yêu cầu tái cấu trúc với 6.000 token đầu vào và 1.500 token đầu ra với giá $0,15 và $0,50 cho mỗi 1 triệu token:

  • Đầu vào: 6.000 / 1.000.000 x $0,15 = $0,0009
  • Đầu ra: 1.500 / 1.000.000 x $0,50 = $0,00075
  • Tổng cộng: $0,00165 cho mỗi yêu cầu

Một nghìn yêu cầu như vậy tốn $1,65. Tín dụng dùng thử $0,50 đủ cho khoảng 303 yêu cầu như vậy, đủ để chạy một benchmark 20 nhiệm vụ nhiều lần. GPU cục bộ có thể rẻ hơn mỗi yêu cầu khi xử lý khối lượng lớn, nhưng nó có chi phí ban đầu và không giảm về 0 khi bạn không sử dụng. Trang giá cả có bảng giá đầy đủ.

Cài đặt thực tế cho việc tạo mã

  • Nhiệt độ từ 0,1 đến 0,3. Các giá trị thấp hơn giảm thiểu việc tạo ra các API giả và sự thay đổi phong cách ngẫu nhiên.
  • Ghim một seed khi bạn so sánh các prompt, để sự khác biệt đến từ prompt chứ không phải từ việc lấy mẫu.
  • Nêu rõ phiên bản Python và các thư viện trong thông điệp hệ thống: "Python 3.11, chỉ thư viện chuẩn" sẽ loại bỏ nhiều sự phỏng đoán.
  • Yêu cầu các bài kiểm tra kèm theo mã. Một mô hình tự viết các bài kiểm tra cho chính nó thường tự phát hiện ra các lỗi lệch một đơn vị khi bạn chạy chúng.
  • Gửi traceback của lần chạy thất bại, không phải mô tả về nó.

Để thử, hãy nhận dùng thử trên trang API key, sau đó làm theo hướng dẫn nhanh. Để sử dụng kiểu trò chuyện, xem hướng dẫn chat LLM không kiểm duyệt. Dịch vụ dành cho người trưởng thành sử dụng hợp pháp và không tạo nội dung tình dục liên quan đến người chưa thành niên.

Các lỗi phổ biến với các mô hình lập trình

  • Import và tên hàm bịa ra. Hãy chạy mã. Một mô hình có thể mô tả một phương thức thư viện không tồn tại, vì vậy bài kiểm tra là trọng tài duy nhất.
  • Cú pháp lỗi thời. Nếu bạn cần các tính năng hiện đại như khớp mẫu cấu trúc, hãy nêu rõ phiên bản Python trong prompt.
  • Quá nhiều ngữ cảnh. Cửa sổ lớn hơn không có nghĩa là bạn nên dán mọi thứ. Hãy gửi các tệp quan trọng, cùng với lỗi.
  • Tin tưởng mã bảo mật được tạo ra. Hãy xem xét thủ công bất kỳ thứ gì liên quan đến xác thực, mật mã hoặc phân tích đầu vào.
  • Chạy đầu ra một cách mù quáng. Mã được tạo ra có thể xóa tệp hoặc thực hiện các cuộc gọi mạng. Hãy sử dụng một môi trường sandbox.

Hỏi đáp

LLM cục bộ nào tốt nhất cho mã Python?

Nó phụ thuộc vào bộ nhớ GPU và các nhiệm vụ của bạn, vì vậy hãy thử hai hoặc ba mô hình có kích thước phù hợp với phần cứng của bạn trên chính mã của bạn và chấm điểm chúng bằng cách chạy các bài kiểm tra. Bảng xếp hạng chỉ là điểm bắt đầu.

Trang web này có phải là một LLM cục bộ không?

Không. Đây là một API tương thích với OpenAI được lưu trữ với ID mô hình uncensored. Nó phù hợp với bạn nếu bạn có thể gửi mã đến một dịch vụ từ xa.

Tôi cần bao nhiêu bộ nhớ GPU cho một mô hình 14B?

Khoảng 28 GB ở chế độ 16-bit, 14 GB ở chế độ 8-bit và 7 GB ở chế độ 4-bit chỉ cho các trọng số, cộng thêm bộ nhớ cho bộ nhớ đệm ngữ cảnh.

Tôi có thể sử dụng nó từ các công cụ Python hiện có không?

Có. Bất kỳ SDK hoặc máy khách OpenAI nào cũng hoạt động một khi bạn đặt base URL thành https://api.uncensoredlocalllm.com/v1 và sử dụng khóa của bạn.

Làm sao để tôi thử nghiệm miễn phí?

Nhận dùng thử $0,50 trên trang khóa API sau khi đăng ký. Nó có giá trị trong 7 ngày, không cần thông tin thanh toán và giới hạn một lần cho mỗi người.

uncensoredlocalllm.com

Khóa của bạn chỉ cách một biểu mẫu

Tạo tài khoản, sao chép khóa, thay đổi base URL. Đó là toàn bộ thiết lập.