Sesuaikan alur kerja Anda menggunakan pustaka fmeval - Amazon SageMaker

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Sesuaikan alur kerja Anda menggunakan pustaka fmeval

Anda dapat menyesuaikan evaluasi model Anda untuk memungkinkan model yang bukan model JumpStart atau Amazon Bedrock atau menggunakan alur kerja khusus untuk evaluasi. Jika Anda menggunakan model Anda sendiri, Anda harus membuat kustomModelRunner. Jika Anda menggunakan dataset Anda sendiri untuk evaluasi, Anda harus mengkonfigurasi DataConfig objek. Bagian berikut menunjukkan cara memformat dataset input Anda, menyesuaikan DataConfig objek untuk menggunakan dataset kustom Anda, dan membuat kustom. ModelRunner

Jika Anda ingin menggunakan kumpulan data Anda sendiri untuk mengevaluasi model Anda, Anda harus menggunakan DataConfig objek untuk menentukan dataset_name dan kumpulan data yang ingin Anda evaluasi. dataset_uri Jika Anda menggunakan dataset bawaan, DataConfig objek sudah dikonfigurasi sebagai default untuk algoritma evaluasi.

Anda dapat menggunakan satu kumpulan data khusus setiap kali Anda menggunakan evaluate fungsi tersebut. Anda dapat memanggil evaluate beberapa kali untuk menggunakan sejumlah kumpulan data yang Anda inginkan.

Konfigurasikan kumpulan data khusus dengan permintaan model Anda yang ditentukan di kolom pertanyaan, dan jawaban target yang ditentukan dalam jawaban kolom, sebagai berikut:

from fmeval.data_loaders.data_config import DataConfig from fmeval.constants import MIME_TYPE_JSONLINES config = DataConfig( dataset_name="tiny_dataset", dataset_uri="tiny_dataset.jsonl", dataset_mime_type=MIME_TYPE_JSONLINES, model_input_location="question", target_output_location="answer", )

DataConfigKelas berisi parameter berikut:

  • dataset_name— Nama dataset yang ingin Anda gunakan untuk mengevaluasi AndaLLM.

    dataset_uri— Jalur lokal atau pengidentifikasi sumber daya seragam (URI) ke lokasi S3 dari kumpulan data Anda.

  • dataset_mime_type— Format data input yang ingin Anda gunakan untuk mengevaluasi AndaLLM. FMEvalPerpustakaan dapat mendukung keduanya MIME_TYPE_JSON danMIME_TYPE_JSONLINES.

  • model_input_location— (Opsional) Nama kolom dalam dataset Anda yang berisi input model atau prompt yang ingin Anda evaluasi.

    Gunakan model_input_location yang menentukan nama kolom Anda. Kolom harus berisi nilai-nilai berikut yang sesuai dengan tugas-tugas terkait berikut:

    • Untuk evaluasi generasi terbuka, toksisitas, dan akurasi, tentukan kolom yang berisi prompt yang harus ditanggapi oleh model Anda.

    • Untuk tugas menjawab pertanyaan, tentukan kolom yang berisi pertanyaan yang harus direspon oleh model Anda.

    • Untuk tugas ringkasan teks, tentukan nama kolom yang berisi teks yang ingin diringkas oleh model Anda.

    • Untuk tugas klasifikasi, tentukan nama kolom yang berisi teks yang ingin diklasifikasikan oleh model Anda.

    • Untuk evaluasi pengetahuan faktual, tentukan nama kolom yang berisi pertanyaan yang Anda inginkan model untuk memprediksi jawabannya.

    • Untuk evaluasi ketahanan semantik, tentukan nama kolom yang berisi input yang Anda inginkan untuk diganggu oleh model Anda.

    • Untuk evaluasi stereotip yang cepat, gunakan sent_more_input_location dan sent_less_input_location bukanmodel_input_location, seperti yang ditunjukkan pada parameter berikut.

  • model_output_location— (Opsional) Nama kolom dalam dataset Anda yang berisi output prediksi yang ingin Anda bandingkan dengan output referensi yang terkandung di target_output_location dalamnya. Jika Anda memberikanmodel_output_location, maka FMEval tidak akan mengirim permintaan ke model Anda untuk inferensi. Sebaliknya, ia menggunakan output yang terkandung dalam kolom yang ditentukan untuk mengevaluasi model Anda.

  • target_output_location— Nama kolom dalam dataset referensi yang berisi nilai sebenarnya untuk dibandingkan dengan nilai prediksi yang terkandung di model_output_location dalamnya. Diperlukan hanya untuk pengetahuan faktual, akurasi, dan ketahanan semantik. Untuk pengetahuan faktual, setiap baris di kolom ini harus berisi semua kemungkinan jawaban yang dipisahkan oleh pembatas. Misalnya, jika jawaban untuk pertanyaan adalah [“UK”, “Inggris”], maka kolom harus berisi “Inggris <OR>Inggris”. Prediksi model benar jika berisi salah satu jawaban yang dipisahkan oleh pembatas.

  • category_location— Nama kolom yang berisi nama kategori. Jika Anda memberikan nilai untukcategory_location, maka skor dikumpulkan dan dilaporkan untuk setiap kategori.

  • sent_more_input_location— Nama kolom yang berisi prompt dengan lebih banyak bias. Diperlukan hanya untuk stereotip cepat. Hindari bias bawah sadar. Untuk contoh bias, lihat kumpulan data Crows-pairs.

  • sent_less_input_location— Nama kolom yang berisi prompt dengan bias yang lebih sedikit. Diperlukan hanya untuk stereotip cepat. Hindari bias bawah sadar. Untuk contoh bias, lihat kumpulan data Crows-pairs.

  • sent_more_output_location— (Opsional) Nama kolom yang berisi probabilitas prediksi bahwa respons yang dihasilkan model Anda akan mengandung lebih banyak bias. Parameter ini hanya digunakan dalam tugas stereotip cepat.

  • sent_less_output_location— (Opsional) Nama kolom yang berisi probabilitas prediksi bahwa respons yang dihasilkan model Anda akan mengandung lebih sedikit bias. Parameter ini hanya digunakan dalam tugas stereotip cepat.

Jika Anda ingin menambahkan atribut baru yang sesuai dengan kolom dataset ke DataConfig kelas, Anda harus menambahkan suffix _location ke akhir nama atribut.

Untuk mengevaluasi model kustom, gunakan kelas data dasar untuk mengonfigurasi model Anda dan membuat kustomModelRunner. Kemudian, Anda dapat menggunakan ini ModelRunner untuk mengevaluasi model bahasa apa pun. Gunakan langkah-langkah berikut untuk menentukan konfigurasi model, membuat kustomModelRunner, dan mengujinya.

ModelRunnerAntarmuka memiliki satu metode abstrak sebagai berikut:

def predict(self, prompt: str) → Tuple[Optional[str], Optional[float]]

Metode ini mengambil prompt sebagai input string, dan mengembalikan Tuple yang berisi respons teks model dan probabilitas log masukan. Setiap orang ModelRunner harus menerapkan predict metode.

Buat kustom ModelRunner
  1. Tentukan konfigurasi model.

    Contoh kode berikut menunjukkan bagaimana menerapkan dataclass dekorator ke HFModelConfig kelas kustom sehingga Anda dapat menentukan konfigurasi model untuk Hugging Facemodel:

    from dataclasses import dataclass @dataclass class HFModelConfig: model_name: str max_new_tokens: int seed: int = 0 remove_prompt_from_generated_text: bool = True

    Dalam contoh kode sebelumnya, berikut ini berlaku:

    • Parameter max_new_tokens ini digunakan untuk membatasi panjang respons dengan membatasi jumlah token yang dikembalikan olehLLM. Jenis model diatur dengan melewatkan nilai model_name ketika kelas dipakai. Dalam contoh ini, nama model diatur kegpt2, seperti yang ditunjukkan pada akhir bagian ini. Parameter max_new_tokens adalah salah satu opsi untuk mengonfigurasi strategi pembuatan teks menggunakan konfigurasi gpt2 model untuk model GPT OpenAI yang telah dilatih sebelumnya. Lihat AutoConfiguntuk jenis model lainnya.

    • Jika parameter remove_prompt_from_generated_text disetel keTrue, maka respons yang dihasilkan tidak akan berisi prompt asal yang dikirim dalam permintaan.

    Untuk parameter pembuatan teks lainnya, lihat Hugging Face dokumentasi untuk GenerationConfig.

  2. Buat kustom ModelRunner dan terapkan metode prediksi. Contoh kode berikut menunjukkan cara membuat kustom ModelRunner untuk Hugging Face model menggunakan HFModelConfig kelas yang dibuat dalam contoh kode sebelumnya.

    from typing import Tuple, Optional import torch from transformers import AutoModelForCausalLM, AutoTokenizer from fmeval.model_runners.model_runner import ModelRunner class HuggingFaceCausalLLMModelRunner(ModelRunner): def __init__(self, model_config: HFModelConfig): self.config = model_config self.model = AutoModelForCausalLM.from_pretrained(self.config.model_name) self.tokenizer = AutoTokenizer.from_pretrained(self.config.model_name) def predict(self, prompt: str) -> Tuple[Optional[str], Optional[float]]: input_ids = self.tokenizer(prompt, return_tensors="pt").to(self.model.device) generations = self.model.generate( **input_ids, max_new_tokens=self.config.max_new_tokens, pad_token_id=self.tokenizer.eos_token_id, ) generation_contains_input = ( input_ids["input_ids"][0] == generations[0][: input_ids["input_ids"].shape[1]] ).all() if self.config.remove_prompt_from_generated_text and not generation_contains_input: warnings.warn( "Your model does not return the prompt as part of its generations. " "`remove_prompt_from_generated_text` does nothing." ) if self.config.remove_prompt_from_generated_text and generation_contains_input: output = self.tokenizer.batch_decode(generations[:, input_ids["input_ids"].shape[1] :])[0] else: output = self.tokenizer.batch_decode(generations, skip_special_tokens=True)[0] with torch.inference_mode(): input_ids = self.tokenizer(self.tokenizer.bos_token + prompt, return_tensors="pt")["input_ids"] model_output = self.model(input_ids, labels=input_ids) probability = -model_output[0].item() return output, probability

    Kode sebelumnya menggunakan HuggingFaceCausalLLMModelRunner kelas kustom yang mewarisi properti dari FMEval ModelRunner kelas. Kelas kustom berisi konstruktor dan definisi untuk fungsi prediksi, yang mengembalikan aTuple.

    Untuk ModelRunner contoh lainnya, lihat bagian model_runner perpustakaan. fmeval

    HuggingFaceCausalLLMModelRunnerKonstruktor berisi definisi berikut:

    • Konfigurasi diatur keHFModelConfig, didefinisikan di awal bagian ini.

    • Model diatur ke model pra-terlatih dari Hugging Face Auto Class yang ditentukan menggunakan parameter model_name pada instantiation.

    • Tokenizer diatur ke kelas dari Hugging Face pustaka tokenizer yang cocok dengan model pra-terlatih yang ditentukan oleh. model_name

    predictMetode di HuggingFaceCausalLLMModelRunner kelas menggunakan definisi berikut:

    • input_ids— Variabel yang berisi masukan untuk model Anda. Model menghasilkan input sebagai berikut.

      • A tokenizer Mengonversi permintaan yang terkandung prompt dalam pengenal token ()IDs. Token iniIDs, yang merupakan nilai numerik yang mewakili token tertentu (kata, sub-kata atau karakter), dapat digunakan langsung oleh model Anda sebagai input. Token IDs dikembalikan sebagai PyTorch objek tensor, seperti yang ditentukan olehreturn_tensors="pt". Untuk tipe tipe tensor balik lainnya, lihat Hugging Face dokumentasi untuk apply_chat_template.

      • Token IDs dikirim ke perangkat tempat model berada sehingga dapat digunakan oleh model.

    • generations— Variabel yang berisi respons yang dihasilkan oleh AndaLLM. Fungsi generate model menggunakan input berikut untuk menghasilkan respons:

      • input_idsDari langkah sebelumnya.

      • Parameter max_new_tokens yang ditentukan dalamHFModelConfig.

      • A pad_token_id menambahkan token akhir kalimat (eos) ke respons. Untuk token lain yang dapat Anda gunakan, lihat Hugging Face dokumentasi untuk PreTrainedTokenizer.

    • generation_contains_input- Variabel boolean yang kembali True ketika respons yang dihasilkan menyertakan prompt input dalam responsnya, dan False sebaliknya. Nilai pengembalian dihitung menggunakan perbandingan elemen antara yang berikut ini.

      • Semua token IDs dalam prompt input yang terkandung di dalamnyainput_ids["input_ids"][0].

      • Awal dari konten yang dihasilkan yang terkandung di dalamnyagenerations[0][: input_ids["input_ids"].shape[1]].

      predictMetode ini mengembalikan peringatan jika Anda mengarahkan LLM ke remove_prompt_from_generated_text dalam konfigurasi Anda tetapi respons yang dihasilkan tidak berisi prompt input.

      Output dari predict metode ini berisi string yang dikembalikan oleh batch_decode metode, yang mengubah token yang IDs dikembalikan dalam respons menjadi teks yang dapat dibaca manusia. Jika Anda menentukan remove_prompt_from_generated_text sebagaiTrue, maka prompt input dihapus dari teks yang dihasilkan. Jika Anda menentukan remove_prompt_from_generated_text sebagaiFalse, teks yang dihasilkan akan dikembalikan tanpa token khusus yang Anda sertakan dalam kamusspecial_token_dict, seperti yang ditentukan olehskip_special_tokens=True.

  3. Uji AndaModelRunner. Kirim permintaan sampel ke model Anda.

    Contoh berikut menunjukkan cara menguji model menggunakan model gpt2 pra-terlatih dari Hugging Face AutoConfigkelas:

    hf_config = HFModelConfig(model_name="gpt2", max_new_tokens=32) model = HuggingFaceCausalLLMModelRunner(model_config=hf_config)

    Dalam contoh kode sebelumnya, model_name tentukan nama model pra-terlatih. HFModelConfigKelas ini dipakai sebagai hf_config dengan nilai untuk parametermax_new_tokens, dan digunakan untuk menginisialisasi. ModelRunner

    Jika Anda ingin menggunakan model pra-terlatih lain dari Hugging Face, pilih pretrained_model_name_or_path di from_pretrained bawah AutoClass.

    Terakhir, uji AndaModelRunner. Kirim permintaan sampel ke model Anda seperti yang ditunjukkan pada contoh kode berikut:

    model_output = model.predict("London is the capital of?")[0] print(model_output) eval_algo.evaluate_sample()