Menilai dan Menggunakan Model Terlaras Halus Anda
Jalankan penilaian kuantitatif yang membandingkan model asas dan model terlaras halus pada kes ujian diketepikan, tukarkan kepada GGUF untuk inferens setempat dan sediakan melalui llama.cpp atau vLLM.
Menilai dan Menggunakan Model Terlaras Halus Anda ialah pelajaran AI Engineering Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran AI Engineering Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.
Mengapa Penilaian Mesti Dilakukan Sebelum Pelaksanaan
Model yang ditala halus dan berprestasi baik pada data latihan mungkin berprestasi lebih teruk daripada model asas dalam kes penggunaan produksi sebenar anda. Satu-satunya cara untuk mengetahuinya ialah melalui penilaian yang teliti. Penalaan halus boleh menyebabkan kealpaan bencana (kehilangan keupayaan yang dimiliki model asas), pengkhususan berlebihan (berprestasi baik pada tugas anda tetapi lebih teruk pada tugas berkaitan), atau kemerosotan kecil dalam tingkah laku keselamatan. Jangan sekali-kali melaksanakan model yang ditala halus tanpa menilainya berbanding model asas menggunakan set ujian yang mewakili keadaan sebenar.
Membina Set Ujian yang Diketepikan
Set ujian anda mesti benar-benar berasingan daripada data latihan dan pengesahan — iaitu contoh yang tidak pernah dilihat model dalam mana-mana fasa latihan. Set ujian tersebut hendaklah mewakili keseluruhan taburan input produksi: kes biasa, kes pinggiran dan input adversarial. Untuk tugas mengikuti arahan, sertakan contoh yang memerlukan pematuhan terhadap semua aspek arahan, bukan hanya aspek yang paling lazim. Set ujian yang mengandungi 100-500 contoh biasanya mencukupi untuk penilaian yang boleh dipercayai.
import json
from typing import TypedDict
class TestCase(TypedDict):
input: str # the user message
expected_output: str # the ideal response
category: str # e.g., 'format', 'accuracy', 'edge_case'
evaluation_method: str # 'exact_match', 'json_schema', 'llm_judge'
# Load test set (never used during training)
def load_test_set(path: str) -> list[TestCase]:
cases = []
with open(path) as f:
for line in f:
data = json.loads(line.strip())
cases.append({
'input': data['messages'][-2]['content'], # user message
'expected_output': data['messages'][-1]['content'], # assistant response
'category': data.get('metadata', {}).get('category', 'general'),
'evaluation_method': data.get('metadata', {}).get('eval_method', 'llm_judge')
})
return cases
test_set = load_test_set('test.jsonl')
print(f'Test set loaded: {len(test_set)} examples')Metrik Kuantitatif untuk Penilaian Khusus Tugas
Pilih metrik penilaian yang sepadan dengan tugas anda. Untuk pengekstrakan JSON, ukur kadar pematuhan skema dan ketepatan pada peringkat medan. Untuk pengelasan, ukur ketepatan, kejituan dan dapatan semula bagi setiap kelas. Untuk penjanaan teks, gunakan pemarkahan LLM sebagai hakim untuk menilai kualiti. Untuk pematuhan format, ukur kadar pematuhan format tepat. Jalankan setiap metrik pada model asas dan model yang ditala halus supaya anda dapat mengukur perbezaan peningkatan.
import json
def evaluate_json_extraction(model_output: str, expected: str, schema: dict) -> dict:
metrics = {'valid_json': False, 'schema_compliant': False, 'field_accuracy': 0.0}
try:
parsed = json.loads(model_output.strip())
metrics['valid_json'] = True
# Check schema compliance
required_fields = schema.get('required', [])
all_present = all(field in parsed for field in required_fields)
correct_types = all(
isinstance(parsed.get(field), schema['properties'][field]['expected_type'])
for field in required_fields if field in parsed
)
metrics['schema_compliant'] = all_present and correct_types
# Field-level accuracy against expected output
expected_parsed = json.loads(expected)
correct_fields = sum(1 for k in expected_parsed if parsed.get(k) == expected_parsed[k])
metrics['field_accuracy'] = correct_fields / len(expected_parsed) if expected_parsed else 0.0
except json.JSONDecodeError:
pass # valid_json stays False
return metricsPenilaian LLM sebagai Hakim
Untuk tugas penjanaan terbuka, gunakan LLM sebagai hakim untuk memberikan skor pada output model yang ditala halus berbanding output yang dijangka. Minta GPT-4o bertindak sebagai penilai, berikan input, output yang dijangka dan output model, kemudian minta model tersebut menilai ketepatan, kelengkapan dan pematuhan format pada skala 1-5. Puratakan skor merentas set ujian untuk mendapatkan penarafan kualiti keseluruhan. Bandingkan skor model yang ditala halus dengan skor model asas pada set ujian yang sama.
from openai import OpenAI
client = OpenAI()
def llm_judge_score(instruction: str, expected: str, actual: str) -> dict:
judge_prompt = f'''Evaluate the quality of an AI assistant response.
Instruction given to assistant:
{instruction}
Expected ideal response:
{expected}
Actual response from model being evaluated:
{actual}
Rate the actual response on these criteria (1=poor, 5=excellent):
1. Correctness: Is the information accurate?
2. Format compliance: Does it follow the expected output format?
3. Completeness: Does it address all parts of the instruction?
Return JSON: {{"correctness": N, "format": N, "completeness": N, "overall": N, "reason": "brief explanation"}}'''
response = client.chat.completions.create(
model='gpt-4o',
messages=[{'role': 'user', 'content': judge_prompt}],
response_format={'type': 'json_object'}
)
return json.loads(response.choices[0].message.content)Menjalankan Penilaian Perbandingan
Jalankan penilaian bersemuka yang membandingkan model asas, model yang ditala halus (dan secara pilihan, garis dasar gesaan yang kukuh) pada semua kes ujian. Jana output daripada setiap model bagi setiap kes ujian, kemudian berikan skor kepada semua output menggunakan metrik penilaian anda. Hasilkan jadual perbandingan yang menunjukkan skor metrik, sisihan piawai dan contoh keadaan model yang ditala halus mengatasi atau dikalahkan oleh garis dasar.
def run_full_evaluation(test_set: list, models: dict, system_prompt: str) -> dict:
results = {name: {'scores': [], 'errors': 0} for name in models}
for i, test_case in enumerate(test_set):
print(f'Evaluating test case {i+1}/{len(test_set)}')
for model_name, model_fn in models.items():
try:
output = model_fn(test_case['input'], system_prompt)
score = llm_judge_score(
test_case['input'],
test_case['expected_output'],
output
)
results[model_name]['scores'].append(score['overall'])
except Exception as e:
results[model_name]['errors'] += 1
results[model_name]['scores'].append(0)
# Summarize
summary = {}
for name, data in results.items():
scores = data['scores']
summary[name] = {
'mean_score': sum(scores) / len(scores),
'errors': data['errors']
}
print(f'{name}: mean={summary[name]["mean_score"]:.2f}, errors={data["errors"]}')
return summaryUjian Regresi untuk Kealpaan Bencana
Penalaan halus boleh merosotkan keupayaan umum model, iaitu fenomena yang dipanggil kealpaan bencana. Jalankan set ujian regresi pada model asas dan model yang ditala halus, meliputi tugas yang penting bagi anda selain tugas sasaran: menjawab soalan umum, penaakulan, penjanaan kod dan mengikuti arahan. Jika skor model yang ditala halus jauh lebih rendah bagi tugas-tugas ini, pangkat LoRA anda mungkin terlalu tinggi atau latihan dijalankan untuk terlalu banyak epok.
REGRESSION_TEST_CASES = [
# General QA
{'input': 'What is the capital of France?', 'expected_substring': 'Paris'},
{'input': 'What is 17 * 23?', 'expected_substring': '391'},
# Instruction following
{'input': 'List 3 planets. Format as: 1. Planet Name', 'expected_pattern': r'^1\. '},
# Reasoning
{'input': 'If all A are B and all B are C, are all A also C?', 'expected_substring': 'yes'},
]
def run_regression_tests(model_fn, test_cases: list) -> float:
passed = 0
for test in test_cases:
output = model_fn(test['input'], '')
if 'expected_substring' in test:
if test['expected_substring'].lower() in output.lower():
passed += 1
elif 'expected_pattern' in test:
import re
if re.search(test['expected_pattern'], output):
passed += 1
rate = passed / len(test_cases)
print(f'Regression test pass rate: {rate:.1%} ({passed}/{len(test_cases)})')
return rateMenukar kepada GGUF untuk Inferens Tempatan
Untuk pelaksanaan tempatan tanpa infrastruktur GPU yang mahal, tukar model yang telah digabungkan kepada format GGUF dan jalankan inferens dengan llama.cpp. GGUF menyokong pelbagai tahap pengkuantuman: Q4_K_M (4-bit, keseimbangan kualiti/kelajuan yang baik), Q8_0 (8-bit, kualiti hampir penuh) dan Q2_K (2-bit, sangat pantas tetapi kualiti lebih rendah). Model 7B yang dikuantumkan Q4 hanya memerlukan kira-kira 4GB RAM dan boleh dijalankan pada CPU pada kelajuan 1-5 token sesaat.
# Step 1: Convert merged HuggingFace model to GGUF
# git clone https://github.com/ggerganov/llama.cpp
# python llama.cpp/convert_hf_to_gguf.py ./merged-model --outtype f16 --outfile model-f16.gguf
# Step 2: Quantize to 4-bit
# ./llama.cpp/llama-quantize model-f16.gguf model-q4.gguf Q4_K_M
# Step 3: Run inference with llama.cpp Python bindings
# pip install llama-cpp-python
from llama_cpp import Llama
llm = Llama(
model_path='./model-q4.gguf',
n_ctx=4096, # context window
n_threads=8, # CPU threads
n_gpu_layers=0 # set > 0 to offload layers to GPU
)
output = llm.create_chat_completion(
messages=[{'role': 'user', 'content': 'What is the capital of France?'}],
temperature=0.1
)
print(output['choices'][0]['message']['content'])Menyediakan Perkhidmatan dengan vLLM untuk Produksi
Untuk menyediakan perkhidmatan model yang ditala halus pada skala produksi, vLLM ialah piawaian semasa. vLLM menggunakan PagedAttention untuk mengumpulkan berbilang permintaan dengan cekap, lalu meningkatkan daya pemprosesan GPU dengan ketara. Ia menyokong titik hujung API yang serasi dengan OpenAI, menjadikannya pengganti terus untuk API OpenAI. Satu GPU A100 yang menjalankan vLLM dengan model 7B yang ditala halus boleh mengendalikan ratusan permintaan seminit.
# Start vLLM server (run from command line)
# pip install vllm
# python -m vllm.entrypoints.openai.api_server \
# --model ./merged-model \
# --host 0.0.0.0 \
# --port 8000 \
# --max-model-len 4096 \
# --tensor-parallel-size 1
# Use with OpenAI client (drop-in replacement)
from openai import OpenAI
client = OpenAI(
base_url='http://localhost:8000/v1',
api_key='not-needed' # vLLM doesn't require auth by default
)
response = client.chat.completions.create(
model='merged-model', # model name matches the path you passed to vLLM
messages=[{'role': 'user', 'content': 'Extract JSON from: "Alice, 30, NYC"'}]
)
print(response.choices[0].message.content)Ujian A/B Model yang Ditala Halus
Sebelum beralih sepenuhnya kepada model yang ditala halus dalam produksi, jalankan ujian A/B: halakan peratusan trafik produksi (mulakan dengan 5-10%) kepada model yang ditala halus, sementara sebahagian besar trafik masih menggunakan model asas atau pendekatan gesaan sedia ada. Pantau skor kualiti, kependaman dan metrik kepuasan pengguna bagi kedua-dua kumpulan. Tingkatkan bahagian trafik model yang ditala halus hanya jika ujian A/B mengesahkan peningkatan selepas menerima bilangan permintaan yang signifikan secara statistik.
import random
class ModelRouter:
def __init__(self, fine_tuned_traffic_fraction=0.1):
self.ft_fraction = fine_tuned_traffic_fraction
self.metrics = {'base': {'count': 0, 'quality_sum': 0}, 'fine_tuned': {'count': 0, 'quality_sum': 0}}
def route(self, user_id: str, request: str) -> dict:
# Deterministic routing by user_id (same user always goes to same model)
use_fine_tuned = (hash(user_id) % 100) < (self.ft_fraction * 100)
model_group = 'fine_tuned' if use_fine_tuned else 'base'
response = call_model(request, use_fine_tuned=use_fine_tuned)
return {'response': response, 'model_group': model_group}
def record_quality(self, model_group: str, quality_score: float):
self.metrics[model_group]['count'] += 1
self.metrics[model_group]['quality_sum'] += quality_score
def ab_test_summary(self) -> dict:
summary = {}
for group, data in self.metrics.items():
avg = data['quality_sum'] / data['count'] if data['count'] > 0 else 0
summary[group] = {'avg_quality': avg, 'n': data['count']}
return summaryMenyelenggara Model yang Ditala Halus dari Semasa ke Semasa
Model yang ditala halus memerlukan penyelenggaraan berterusan. Apabila model asas dikemas kini (versi GPT-4o baharu, keluaran Mistral baharu), pemberat penyesuai anda mungkin tidak serasi dan anda mungkin perlu menjalankan latihan semula. Apabila keperluan tugas berubah, anda perlu mengemas kini data latihan dan menjalankan latihan semula. Apabila anda menemui mod kegagalan baharu dalam produksi, tambahkan contoh tersebut pada set latihan anda. Rancang latihan semula berkala sebagai sebahagian daripada aliran kerja operasi ML produksi anda.
Matriks Keputusan Pelaksanaan
Pemilihan strategi pelancaran untuk model yang ditala halus bergantung pada skala dan kekangan infrastruktur anda. Untuk jumlah rendah (kurang daripada 1000 permintaan sehari), API penalaan halus OpenAI ialah pilihan paling mudah. Untuk jumlah sederhana (1000–100,000 sehari), pertimbangkan vLLM pada satu tika GPU. Untuk aplikasi jumlah tinggi atau kritikal dari segi kependaman, gunakan vLLM dengan berbilang GPU, pertimbangkan pemprosesan selari tensor dan tambahkan lapisan cache di hadapan. Untuk data sensitif dari segi privasi, hoskan sendiri pada infrastruktur anda menggunakan GGUF/llama.cpp atau vLLM.
Semakan Pantas
Uji pemahaman anda tentang penilaian dan pelancaran model yang ditala halus daripada pelajaran ini.
Ulang Kaji Pelajaran
Dalam pelajaran ini, anda mempelajari bahawa penilaian prapelancaran yang ketat dengan membandingkan model yang ditala halus dengan model asas pada kes ujian yang diketepikan adalah wajib, ujian regresi mengesan kehilangan teruk keupayaan umum akibat pengkhususan berlebihan, dan pilihan pelancaran merangkumi API penalaan halus terurus OpenAI untuk kemudahan, vLLM untuk penyajian produksi berdaya pemprosesan tinggi serta GGUF/llama.cpp untuk inferens setempat berasaskan CPU. Tahniah kerana telah melengkapkan laluan Kejuruteraan AI!
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Menilai dan Menggunakan Model Terlaras Halus Anda” percuma?
Ya — teks penuh “Menilai dan Menggunakan Model Terlaras Halus Anda” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus AI Engineering Academy, tingkat taraf kepada CoddyKit PRO. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menilai dan Menggunakan Model Terlaras Halus Anda”?
Jalankan penilaian kuantitatif yang membandingkan model asas dan model terlaras halus pada kes ujian diketepikan, tukarkan kepada GGUF untuk inferens setempat dan sediakan melalui llama.cpp atau vLLM. Anda berlatih AI Engineering Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan AI Engineering Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran AI Engineering Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Menilai dan Menggunakan Model Terlaras Halus Anda” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran AI Engineering Academy ini?
Ya. Setiap pelajaran AI Engineering Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Masa Penalaan Halus Mengatasi Penggesaan
- Menyediakan Set Data Latihan Berkualiti Tinggi
- Penalaan Halus LoRA dengan Hugging Face PEFT
- Menilai dan Menggunakan Model Terlaras Halus Anda