Điểm chính
- Mô hình cục bộ tốt nhất là mô hình lớn nhất vừa với VRAM của bạn ở tốc độ hữu dụng, không phải mô hình có danh tiếng tốt nhất.
- Ollama cung cấp một endpoint tương thích OpenAI trên máy của riêng bạn, vì vậy cùng mã nguồn client hoạt động được cả cục bộ và lưu trữ.
- Cục bộ mang lại quyền riêng tư và khả năng sử dụng ngoại tuyến; lưu trữ cung cấp mô hình lớn hơn, không cần phần cứng và không cần thiết lập.
- Chúng tôi chỉ cung cấp một endpoint lưu trữ: không có tải xuống mô hình từ dịch vụ này.
Câu trả lời ngắn gọn: chọn theo bộ nhớ, sau đó thử hai hoặc ba
Không có một mô hình tốt nhất duy nhất cho việc này, vì giới hạn là phần cứng của bạn. Một mô hình phải vừa vào bộ nhớ GPU (hoặc vào RAM hệ thống, chậm hơn nhiều) cùng với bộ nhớ đệm hoạt động của nó. Quy tắc thực tế rất đơn giản: hãy tìm mô hình lớn nhất vừa thoải mái trong bộ nhớ của bạn và vẫn đáp ứng ở tốc độ bạn có thể chấp nhận, sau đó so sánh hai hoặc ba ứng viên trên các prompt của riêng bạn.
Tên mô hình và bảng xếp hạng thay đổi mỗi vài tuần, vì vậy bất kỳ danh sách nào được viết ngày hôm nay đều nhanh chóng bị lỗi thời. Hãy bỏ qua các bảng xếp hạng và sử dụng một phương pháp ngắn gọn: duyệt qua thư viện Ollama và các bản tải lên cộng đồng, lọc các mô hình được mô tả là uncensored, abliterated hoặc tinh chỉnh cho nhập vai, tải về một mô hình nhỏ và một mô hình kích thước trung bình, và chạy cùng mười prompt trên mỗi mô hình. Các prompt của riêng bạn cho bạn biết nhiều hơn một điểm số trên benchmark của người khác.
Nếu sau đó bạn nhận thấy rằng các mô hình vừa với máy của bạn quá nhỏ so với chất lượng bạn muốn, một endpoint lưu trữ là lựa chọn thay thế. Phần còn lại của trang này trình bày sự đánh đổi để bạn có thể quyết định bằng các con số.
Cách xác định kích thước mô hình cho máy của bạn
Ba số quyết định những gì chạy tốt: số lượng tham số, lượng tử hóa và độ dài ngữ cảnh.
Tham số và lượng tử hóa
Một mô hình có nhiều tham số thường viết tốt hơn, tuân theo hướng dẫn đáng tin cậy hơn và duy trì nhân vật lâu hơn. Nhưng tham số chiếm bộ nhớ. Ở độ chính xác 16-bit đầy đủ, một mô hình cần khoảng hai byte cho mỗi tham số, vì vậy một mô hình 7B cần khoảng 14 GB trước khi có bất kỳ bộ nhớ đệm nào. Lượng tử hóa làm giảm điều đó. Một phiên bản 4-bit cần khoảng nửa byte cho mỗi tham số, vì vậy cùng một mô hình 7B chỉ vừa trong khoảng 4 đến 5 GB. Chất lượng giảm một chút ở mỗi bước giảm, và sự mất mát thường nhỏ ở 4 đến 5 bit và rõ ràng dưới mức đó.
Độ dài ngữ cảnh
Cửa sổ ngữ cảnh cũng tốn bộ nhớ, vì mô hình lưu trữ bộ nhớ đệm của mọi thứ trong cuộc trò chuyện. Một phiên nhập vai dài hoặc một câu chuyện có nhiều văn bản trước đó cần một bộ nhớ đệm lớn hơn. Ollama cho phép bạn đặt kích thước ngữ cảnh cho mỗi mô hình, và một giá trị lớn hơn sử dụng nhiều bộ nhớ hơn và làm chậm quá trình tạo. Nhiều thiết lập cục bộ chạy với cửa sổ vài nghìn token để giữ tốc độ, có nghĩa là mô hình quên phần đầu của các cuộc trò chuyện dài.
Tốc độ
Nếu một mô hình tràn khỏi bộ nhớ GPU vào RAM hệ thống, tốc độ tạo văn bản có thể giảm từ mức đọc dễ chịu xuống còn một từ mỗi lần. Một mô hình nhỏ hơn vừa hoàn toàn trên GPU thường mang lại trải nghiệm tốt hơn một mô hình lớn hơn không vừa hoàn toàn, ngay cả khi mô hình lớn hơn viết tốt hơn một chút.
Chạy một mô hình trong Ollama và gọi nó từ mã nguồn
Sau khi Ollama được cài đặt, việc kéo và trò chuyện chỉ cần hai lệnh, và tên mô hình chính xác đến từ trang thư viện bạn đã chọn:
ollama pull MODEL_NAME
ollama run MODEL_NAME
Ollama cũng cung cấp một API tương thích OpenAI trên máy của riêng bạn, mặc định tại http://localhost:11434/v1. Điều đó có nghĩa là cùng mã nguồn client có thể giao tiếp với một mô hình cục bộ hoặc một mô hình lưu trữ, và bạn chuyển đổi bằng cách thay đổi base URL và tên mô hình:
from openai import OpenAI
# Local Ollama (the key is ignored but must be non-empty)
local = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
# Hosted endpoint
hosted = OpenAI(base_url="https://api.ornith.top/v1", api_key="YOUR_API_KEY")
def ask(client, model, text):
r = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": text}],
)
return r.choices[0].message.content
prompt = "Write a tense two-paragraph scene set in an abandoned lighthouse."
print(ask(local, "MODEL_NAME", prompt))
print(ask(hosted, "uncensored", prompt))
Chạy cả hai trên cùng các prompt là cách nhanh nhất để trả lời câu hỏi cho trường hợp của riêng bạn. Nếu đầu ra cục bộ đủ tốt, bạn đã xong và nó tốn điện của bạn. Nếu không, bạn có một điểm chuẩn cho những gì bạn sẽ đạt được.
Ollama cục bộ so với API lưu trữ
Không cái nào tốt hơn trong mọi trường hợp. Bảng này chỉ nêu những gì đúng về mặt cấu trúc của mỗi phương pháp.
| Điểm | Cục bộ với Ollama | API lưu trữ |
|---|---|---|
| Chi phí ban đầu | GPU của riêng bạn hoặc một máy có đủ RAM | Không; tín dụng trả trước từ $20 |
| Chi phí vận hành | Điện và thời gian của bạn | $0.15 cho mỗi 1M token đầu vào, $0.50 cho mỗi 1M token đầu ra |
| Kích thước mô hình | Giới hạn bởi bộ nhớ của bạn | Một mô hình do nhà cung cấp chọn |
| Hoạt động ngoại tuyến | Có | Không, cần internet |
| Dữ liệu rời khỏi máy của bạn | Không | Có, các prompt được gửi đến nhà cung cấp; của chúng tôi không được sử dụng để huấn luyện |
| Lựa chọn mô hình | Bất cứ thứ gì bạn có thể tải xuống | Chỉ cái được cung cấp |
| Người dùng đồng thời | Bị giới hạn bởi phần cứng của bạn | Tối đa 8 yêu cầu đồng thời trên một khóa API đầy đủ |
| Cài đặt | Cài đặt, tải về, tinh chỉnh cài đặt | Thay đổi base URL và khóa |
Cục bộ thắng về quyền riêng tư, sử dụng ngoại tuyến và tự do lựa chọn. Nếu văn bản của bạn không bao giờ rời khỏi máy của bạn, hoặc bạn muốn hoán đổi mô hình hàng tuần, hãy chạy cục bộ. Một API lưu trữ thắng về thời gian thiết lập, về việc không chiếm dụng GPU của bạn khi bạn làm việc, và về việc phục vụ một ứng dụng với nhiều người dùng cùng lúc.
Cũng công bằng khi nói về những gì chúng tôi không cung cấp. Dịch vụ này chỉ là một endpoint được lưu trữ. Không có tệp mô hình để tải xuống, không có fine-tuning và không có cách nào để sử dụng trọng số của riêng bạn. Nếu bạn muốn sở hữu mô hình, Ollama là công cụ phù hợp, và hướng dẫn API LLM mã nguồn mở của chúng tôi sẽ đi qua tập hợp các tùy chọn rộng hơn.
Chi phí lưu trữ, được tính toán chi tiết
Mọi người thường cho rằng một mô hình lưu trữ đắt hơn so với việc chạy cục bộ miễn phí. Chạy cục bộ không miễn phí khi bạn tính đến phần cứng, nhưng việc so sánh dễ dàng hơn với việc sử dụng cụ thể. Giá ở đây là $0,15 cho mỗi 1M token đầu vào và $0,50 cho mỗi 1M token đầu ra.
- Nhập vai tự do, 100 tin nhắn mỗi ngày. Mỗi lượt gửi 3.000 token lịch sử và nhận lại 300 token. Chi phí đầu vào mỗi lượt: 3.000 token ở mức $0,15/1M token là $0,00045. Chi phí đầu ra: 300 token ở mức $0,50/1M token là $0,00015. Tổng cộng $0,0006 cho mỗi lượt, $0,06 cho 100 lượt, tương đương $1,80 trong 30 ngày.
- Một dự án viết lách. 5M token đầu vào và 1M token đầu ra trong một tháng là $0,75 cộng $0,50, vậy $1,25.
- Một ứng dụng nhỏ. 200M token đầu vào và 40M token đầu ra mỗi tháng là $30 cộng $20, vậy $50.
Chỉ bạn mới định giá được GPU của mình, nhưng chi phí lưu trữ cho mức sử dụng nhẹ và trung bình rất thấp. Nạp tiền tối thiểu $20 đủ dùng cho một khoảng thời gian dài ở hai mức đầu, và tín dụng không bao giờ hết hạn nên sẽ không biến mất nếu bạn nghỉ một tháng. Các gói nạp lớn hơn có thêm phần thưởng: 5% từ $50, 10% từ $100, 15% từ $200. Chi tiết đầy đủ có trên trang giá cả.
Một cách hợp lý để kết hợp cả hai
Bạn không phải chọn một lần. Nhiều người chạy một mô hình cục bộ nhỏ cho các bản nháp nhanh và ghi chú riêng tư, và gửi các công việc dài hơn hoặc đòi hỏi hơn đến một endpoint lưu trữ. Vì cả hai đều sử dụng định dạng OpenAI, ứng dụng của bạn có thể giữ hai đối tượng client và định tuyến theo nhiệm vụ, như trong mã nguồn ở trên.
Khi bạn kiểm tra phần được lưu trữ, người dùng mới có thể nhận $0.50 tín dụng dùng thử bằng một cú nhấp chuột trên trang khóa API, không cần thẻ, mỗi người một lần, có giá trị trong 7 ngày. Với các số liệu trên mỗi lượt ở trên, đó là hàng trăm lượt đóng vai, đủ để so sánh với mô hình cục bộ tốt nhất của bạn trên các prompt giống hệt nhau. Bạn có thể tạo khóa API sau khi đăng nhập bằng Google hoặc bằng email và mật khẩu. Tài liệu API liệt kê các tham số như temperature, top_p, stop và seed, được chuyển tiếp, vì cài đặt lấy mẫu cục bộ của bạn được áp dụng.
Một vài giới hạn cần lên kế hoạch. Khóa dùng thử cho phép 2 yêu cầu đồng thời và 60 yêu cầu mỗi phút; khóa đầy đủ cho phép 8 và 300. Cửa sổ ngữ cảnh là 100.000 token, lớn hơn nhiều so với những gì hầu hết các thiết lập cục bộ chạy thoải mái. Và quy tắc duy nhất không thay đổi bởi bất kỳ cài đặt nào: mô hình dành cho mục đích sử dụng hợp pháp của người trưởng thành và sẽ không tạo ra nội dung tình dục liên quan đến người chưa thành niên.
