

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

# Optimalisasi Preferensi Langsung (DPO)
<a name="nova-dpo-smtj"></a>

## Ikhtisar
<a name="nova-dpo-smtj-overview"></a>

Direct Preference Optimization (DPO) adalah teknik penyelarasan yang menyempurnakan model fondasi menggunakan data perbandingan berpasangan untuk menyelaraskan output model dengan preferensi manusia. Tidak seperti metode pembelajaran penguatan, DPO secara langsung mengoptimalkan perilaku model berdasarkan umpan balik manusia tentang respons mana yang lebih diinginkan, menawarkan pendekatan yang lebih stabil dan terukur.

**Mengapa menggunakan DPO**

Model foundation dapat menghasilkan output yang benar secara faktual tetapi gagal untuk menyelaraskan dengan kebutuhan pengguna tertentu, nilai-nilai organisasi, atau persyaratan keselamatan. DPO mengatasi ini dengan memungkinkan Anda untuk:
+ Sempurnakan model ke arah pola perilaku yang diinginkan
+ Mengurangi output yang tidak diinginkan atau berbahaya
+ Sejajarkan respons model dengan suara merek dan pedoman komunikasi
+ Meningkatkan kualitas respons berdasarkan umpan balik pakar domain
+ Menerapkan pagar pengaman melalui pola respons yang disukai

**Bagaimana DPO bekerja**

DPO menggunakan contoh berpasangan di mana evaluator manusia menunjukkan mana dari dua kemungkinan tanggapan yang lebih disukai. Model belajar untuk memaksimalkan kemungkinan menghasilkan respons yang disukai sambil meminimalkan yang tidak diinginkan.

**Kapan menggunakan DPO**

Gunakan DPO dalam skenario berikut:
+ Mengoptimalkan output subjektif yang memerlukan penyelarasan dengan preferensi manusia tertentu
+ Menyesuaikan nada model, gaya, atau karakteristik konten
+ Membuat perbaikan yang ditargetkan berdasarkan umpan balik pengguna dan analisis kesalahan
+ Mempertahankan kualitas output yang konsisten di berbagai kasus penggunaan
+ Pelatihan dengan pembelajaran penguatan bebas hadiah hanya menggunakan data preferensi

## Model dan teknik yang didukung
<a name="nova-dpo-smtj-models"></a>

DPO mendukung fine-tuning parameter penuh dan LoRa (Adaptasi Peringkat Rendah):


| Model | Input yang didukung | Tipe instans | Jumlah instans yang disarankan | Jumlah instans yang diizinkan | 
| --- | --- | --- | --- | --- | 
| Amazon Nova Mikro | Teks | ml.p5.48xbesar | 2 | 2, 4, 8 | 
| Amazon Nova Lite | Teks, gambar | ml.p5.48xbesar | 4 | 2, 4, 8, 16 | 
| Amazon Nova Pro | Teks, gambar | ml.p5.48xbesar | 6 | 6, 12, 24 | 

**Pendekatan pelatihan**
+ **DPO peringkat penuh: Memperbarui** semua parameter model. Berpotensi memberikan kualitas penyelarasan yang lebih baik tetapi membutuhkan lebih banyak sumber daya komputasi dan menghasilkan model yang lebih besar.
+ **LoRa DPO**: Menggunakan adaptor ringan untuk penyetelan parameter yang efisien. Menawarkan pelatihan dan penerapan yang lebih efisien dengan model keluaran yang lebih kecil sambil mempertahankan kualitas penyelarasan yang baik.

Untuk sebagian besar kasus penggunaan, pendekatan LoRa memberikan kemampuan adaptasi yang memadai dengan efisiensi yang ditingkatkan secara signifikan.

## Format data
<a name="nova-dpo-smtj-data"></a>

Data pelatihan DPO mengikuti format yang sama dengan SFT, kecuali giliran asisten terakhir harus berisi pasangan preferensi dengan `preferred` dan `non-preferred` label.

### Struktur dasar
<a name="nova-dpo-smtj-data-structure"></a>

Giliran asisten terakhir menggunakan `candidates` array alih-alih`content`:

```
{
  "role": "assistant",
  "candidates": [
    {
      "content": [
        {
          "text": "This is the preferred response."
        }
      ],
      "preferenceLabel": "preferred"
    },
    {
      "content": [
        {
          "text": "This is the non-preferred response."
        }
      ],
      "preferenceLabel": "non-preferred"
    }
  ]
}
```

### Contoh teks lengkap
<a name="nova-dpo-smtj-data-text-example"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a helpful assistant."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What is the capital of France?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "The capital of France is Paris."
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "text": "Tell me more about it."
        }
      ]
    },
    {
      "role": "assistant",
      "candidates": [
        {
          "content": [
            {
              "text": "Paris is the capital and largest city of France, known for the Eiffel Tower, world-class museums like the Louvre, and its rich cultural heritage."
            }
          ],
          "preferenceLabel": "preferred"
        },
        {
          "content": [
            {
              "text": "Paris is a city in France."
            }
          ],
          "preferenceLabel": "non-preferred"
        }
      ]
    }
  ]
}
```

### Contoh dengan gambar
<a name="nova-dpo-smtj-data-image-example"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a helpful assistant."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "Describe this image."
        },
        {
          "image": {
            "format": "jpeg",
            "source": {
              "s3Location": {
                "uri": "s3://your-bucket/your-path/image.jpg",
                "bucketOwner": "your-aws-account-id"
              }
            }
          }
        }
      ]
    },
    {
      "role": "assistant",
      "candidates": [
        {
          "content": [
            {
              "text": "The image shows a detailed description with relevant context and observations."
            }
          ],
          "preferenceLabel": "preferred"
        },
        {
          "content": [
            {
              "text": "This is a picture."
            }
          ],
          "preferenceLabel": "non-preferred"
        }
      ]
    }
  ]
}
```

### Persyaratan dataset
<a name="nova-dpo-smtj-data-requirements"></a>
+ **Format**: File JSONL tunggal untuk pelatihan, file JSONL tunggal untuk validasi (opsional)
+ **Ukuran minimum**: 1.000 pasangan preferensi direkomendasikan untuk pelatihan yang efektif
+ **Kualitas**: Data preferensi berkualitas tinggi menghasilkan hasil yang lebih efektif
+ **Kendala lainnya: Sama seperti SFT**. Untuk informasi selengkapnya, lihat Batasan set data.

**Mengunggah data**

```
aws s3 cp /path/to/training-data/ s3://your-bucket/train/ --recursive
aws s3 cp /path/to/validation-data/ s3://your-bucket/val/ --recursive
```

## Konfigurasi resep
<a name="nova-dpo-smtj-recipe"></a>

### Konfigurasi run umum
<a name="nova-dpo-smtj-recipe-run"></a>

```
run:
  name: "my-dpo-run"
  model_type: "amazon.nova-lite-v1:0:300k"
  model_name_or_path: "nova-lite/prod"
  replicas: 4
```


| Parameter | Deskripsi | 
| --- | --- | 
| name | Nama deskriptif untuk pekerjaan pelatihan Anda | 
| model\$1type | Varian model Nova (jangan modifikasi) | 
| model\$1name\$1or\$1path | Jalur model dasar (jangan dimodifikasi) | 
| replicas | Jumlah instans komputasi untuk pelatihan terdistribusi | 

### Konfigurasi pelatihan
<a name="nova-dpo-smtj-recipe-training"></a>

```
training_config:
  max_length: 16384
  global_batch_size: 32

  trainer:
    max_epochs: 3

  model:
    hidden_dropout: 0.0
    attention_dropout: 0.0
    ffn_dropout: 0.0
```


| Parameter | Deskripsi | Kisaran | 
| --- | --- | --- | 
| max\$1length | Panjang urutan maksimum dalam token | 1024—32768 | 
| global\$1batch\$1size | Sampel per langkah pengoptimal | Micro/Lite/Pro: 16, 32, 64, 128. Micro/Lite: 256 | 
| max\$1epochs | Pelatihan melewati dataset | Min: 1 | 
| hidden\$1dropout | Putus sekolah untuk status tersembunyi | 0,0—1,0 | 
| attention\$1dropout | Putus sekolah untuk bobot perhatian | 0,0—1,0 | 
| ffn\$1dropout | Putus sekolah untuk lapisan feed-forward | 0,0—1,0 | 

### Konfigurasi pengoptimal
<a name="nova-dpo-smtj-recipe-optimizer"></a>

```
model:
  optim:
    lr: 1e-5
    name: distributed_fused_adam
    adam_w_mode: true
    eps: 1e-08
    weight_decay: 0.0
    betas:
      - 0.9
      - 0.999
    sched:
      warmup_steps: 10
      constant_steps: 0
      min_lr: 1e-6
```


| Parameter | Deskripsi | Kisaran | 
| --- | --- | --- | 
| lr | Tingkat pembelajaran | 0—1 (biasanya 1e-6 hingga 1e-4) | 
| weight\$1decay | Kekuatan regularisasi L2 | 0,0—1,0 | 
| warmup\$1steps | Langkah-langkah untuk meningkatkan tingkat pembelajaran secara bertahap | 0—20 | 
| min\$1lr | Tingkat pembelajaran minimum pada akhir pembusukan | 0—1 (harus < lr) | 

### Konfigurasi khusus DPO
<a name="nova-dpo-smtj-recipe-dpo"></a>

```
model:
  dpo_cfg:
    beta: 0.1
```


| Parameter | Deskripsi | Kisaran | 
| --- | --- | --- | 
| beta | Keseimbangan antara pemasangan data pelatihan dan tetap dekat dengan model asli | 0,001—0,5 | 
+ **Beta yang lebih tinggi (0.1)**: Mempertahankan lebih banyak perilaku model referensi tetapi dapat mempelajari preferensi lebih lambat
+ **Beta yang lebih rendah (0,01-0,05)**: Pembelajaran preferensi yang lebih agresif tetapi berisiko berbeda dari referensi

**Rekomendasi**: Mulailah dengan `beta: 0.1` dan sesuaikan ke bawah jika pembelajaran preferensi tampaknya tidak mencukupi.

### Konfigurasi LoRa PEFT
<a name="nova-dpo-smtj-recipe-lora"></a>

```
model:
  peft:
    peft_scheme: "lora"
    lora_tuning:
      loraplus_lr_ratio: 64.0
      alpha: 32
      adapter_dropout: 0.01
```


| Parameter | Deskripsi | Nilai yang diizinkan | 
| --- | --- | --- | 
| peft\$1scheme | Metode fine-tuning | "lora"atau null (peringkat penuh) | 
| alpha | Faktor penskalaan untuk bobot LoRa | 32, 64, 96, 128, 160, 192 | 
| loraplus\$1lr\$1ratio | Faktor penskalaan tingkat pembelajaran LoRa\$1 | 0,0—100,0 | 
| adapter\$1dropout | Regularisasi untuk parameter LoRa | 0,0—1,0 | 

## Memulai pekerjaan pelatihan
<a name="nova-dpo-smtj-start"></a>

**Gambar kontainer**

```
708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest
```

**Contoh kode**

```
from sagemaker.pytorch import PyTorch
from sagemaker.inputs import TrainingInput

instance_type = "ml.p5.48xlarge"
instance_count = 4

image_uri = "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest"

recipe_overrides = {
    "training_config": {
        "trainer": {"max_epochs": 2},
        "model": {
            "dpo_cfg": {"beta": 0.1},
            "peft": {
                "peft_scheme": "lora",
                "lora_tuning": {
                    "loraplus_lr_ratio": 64.0,
                    "alpha": 32,
                    "adapter_dropout": 0.01,
                },
            },
        },
    },
}

estimator = PyTorch(
    output_path=f"s3://{bucket_name}/{job_name}",
    base_job_name=job_name,
    role=role,
    instance_count=instance_count,
    instance_type=instance_type,
    training_recipe="fine-tuning/nova/nova_lite_p5_gpu_lora_dpo",
    recipe_overrides=recipe_overrides,
    max_run=18000,
    sagemaker_session=sagemaker_session,
    image_uri=image_uri,
    disable_profiler=True,
    debugger_hook_config=False,
)

train_input = TrainingInput(
    s3_data=train_dataset_s3_path,
    distribution="FullyReplicated",
    s3_data_type="Converse",
)

val_input = TrainingInput(
    s3_data=val_dataset_s3_path,
    distribution="FullyReplicated",
    s3_data_type="Converse",
)

estimator.fit(inputs={"train": train_input, "validation": val_input}, wait=True)
```

## Menerapkan model
<a name="nova-dpo-smtj-deploy"></a>

Setelah pelatihan selesai, terapkan model yang disesuaikan ke Amazon Bedrock menggunakan fungsionalitas Impor Model Kustom. Model ini mendukung throughput yang disediakan dan inferensi sesuai permintaan. Model terlatih Lora mendukung inferensi sesuai permintaan.

Untuk petunjuk penerapan, lihat [Menerapkan model yang disesuaikan](deploy-custom-model.md).

## Batasan
<a name="nova-dpo-smtj-limitations"></a>
+ **Modalitas input**: DPO hanya menerima teks dan gambar. Input video tidak didukung.
+ **Modalitas keluaran**: Hanya teks
+ **Pasangan preferensi**: Giliran asisten terakhir harus berisi tepat dua kandidat dengan `preferred` dan `non-preferred` label
+ **Batas gambar**: Maksimum 10 gambar per blok konten
+ **Modalitas campuran**: Tidak dapat menggabungkan teks, gambar, dan video dalam pekerjaan pelatihan yang sama