All Products
Search
Document Center

Auto Scaling:Gunakan spot instans untuk menghemat biaya fine-tuning model besar

Last Updated:Jun 17, 2026

Untuk mengurangi biaya fine-tuning model, Anda dapat menggunakan grup penskalaan untuk secara otomatis menyediakan spot instans. Solusi ini memastikan kelangsungan pelatihan dengan secara otomatis membuat instans baru dan melanjutkan dari checkpoint terbaru ketika spot instans mengalami interruption and reclamation.

Ikhtisar solusi

Solusi ini menggunakan grup penskalaan untuk mengaktifkan fine-tuning model besar berbiaya rendah. Solusi ini menerapkan strategi prioritas spot instans dan menggunakan Object Storage Service (OSS) untuk menyimpan checkpoint secara persisten. Selama proses pelatihan:

  1. Prioritaskan spot instans: Grup penskalaan memprioritaskan spot instans untuk tugas pelatihan dan menggunakan OSS untuk menyimpan file checkpoint.

  2. Ketika spot instans terganggu dan ditarik kembali: Grup penskalaan pertama-tama mencoba menyediakan spot instans dari inventaris yang tersedia di zona ketersediaan lain. Jika inventaris spot tidak mencukupi, sistem secara otomatis menyediakan instans pay-as-you-go dan melanjutkan pelatihan dari checkpoint terbaru.

  3. Setelah inventaris spot dipulihkan: Grup penskalaan secara otomatis mengganti instans pay-as-you-go dengan spot instans dan melanjutkan pelatihan dari checkpoint terbaru.

image

Catatan

Jika Anda sensitif terhadap biaya dan dapat menerima waktu pelatihan yang lebih lama, Anda dapat mengonfigurasi grup penskalaan untuk hanya menggunakan spot instans. Dalam konfigurasi ini, pelatihan dijeda ketika spot instans tidak tersedia dan dilanjutkan secara otomatis ketika inventaris dipulihkan, sehingga memaksimalkan penghematan biaya Anda. Pelajari lebih lanjut tentang menggabungkan grup penskalaan dan spot instans.

Perbandingan biaya

Penting

Perbandingan biaya berikut hanya sebagai referensi. Penghematan aktual dapat bervariasi berdasarkan kondisi runtime.

Asumsikan total waktu pelatihan 12 jam, harga spot instans 3,5/jam, dan harga instans pay-as-you-go 10/jam. Perbandingan biayanya adalah sebagai berikut.

Mode

Hanya spot instans

Hibrida (spot dan pay-as-you-go)

Bayar Sesuai Pemakaian Saja

Deskripsi

Ketika spot instans terganggu dan ditarik kembali, pelatihan dijeda. Spot instans baru secara otomatis diluncurkan untuk melanjutkan pelatihan setelah kapasitas dipulihkan.

Asumsikan dari total 12 jam pelatihan, 8 jam menggunakan spot instans dan 4 jam menggunakan instans pay-as-you-go akibat gangguan.

Seluruh pelatihan dilakukan pada instans pay-as-you-go.

Biaya

12 jam × 3,5/jam = 42

8 jam × 3,5/jam + 4 jam × 10/jam = 68

12 jam × 10/jam = 120

Penghematan vs. hanya pay-as-you-go

65%

43,33%

0%

Prosedur

  1. Buat gambar kustom dengan lingkungan pelatihan dasar.

    Gambar ini berfungsi sebagai gambar peluncuran untuk instans dalam grup penskalaan. Gambar ini mencakup skrip startup yang secara otomatis melanjutkan pelatihan, memastikan bahwa instans baru dapat segera memulai tugas tanpa intervensi manual.

  2. Buat dan konfigurasikan grup penskalaan.

    Grup penskalaan secara otomatis membuat instans spot atau pay-as-you-go baru setelah terjadi gangguan, memastikan tugas pelatihan berlanjut.

  3. Mulai tugas pelatihan.

    Mengaktifkan grup penskalaan memicu event scale-out, membuat instans yang secara otomatis memulai tugas pelatihan.

  4. Simulasikan gangguan (verifikasi).

    Lepaskan instans secara manual untuk mensimulasikan skenario gangguan atau penarikan kembali. Verifikasi bahwa instans baru diluncurkan dan tugas pelatihan dilanjutkan secara otomatis guna memastikan stabilitas dan keandalan.

1. Buat gambar pelatihan kustom

Topik ini menunjukkan cara melakukan fine-tuning self-cognition pada model DeepSeek-R1-Distill-Qwen-7B dengan menggunakan framework pelatihan Swift pada konfigurasi single-machine, single-GPU.

Pertama, buat instans dengan lingkungan pelatihan dan dependensi yang diperlukan. Kemudian, buat gambar kustom dari instans ini untuk dijadikan gambar peluncuran bagi grup penskalaan Anda, yang meningkatkan efisiensi startup. Gambar ini mencakup skrip pelatihan otomatis dan layanan boot-start untuk mengotomatiskan alur kerja. Arsitektur Instance ECS yang digunakan untuk membuat gambar ini ditunjukkan pada gambar berikut.

image

Komponen utama meliputi:

  • Dependensi lingkungan pelatihan dasar: Termasuk driver GPU, CUDA, dan dependensi Python terkait, yang bervariasi tergantung pada framework pelatihan.

  • Skrip pelatihan otomatis: Skrip ini harus secara otomatis memeriksa apakah akan melanjutkan dari checkpoint terbaru dan apakah pelatihan telah selesai.

  • Pemasangan bucket otomatis saat startup: Saat skrip pelatihan dimulai, skrip tersebut membaca bobot model, dataset, dan file checkpoint yang dihasilkan dari bucket OSS.

  • Layanan boot-start: Layanan ini memastikan bahwa skrip pelatihan berjalan secara otomatis setelah instans dimulai, membaca file yang diperlukan dari bucket untuk memulai atau melanjutkan pelatihan.

Setelah memahami komponen-komponen ini, ikuti langkah-langkah di bawah ini untuk membuat gambar.

1.1 Buat instans dan bangun lingkungan

Instans ini berfungsi sebagai templat untuk membuat gambar kustom. Nantinya, grup penskalaan akan menggunakan gambar ini untuk secara otomatis membuat instans baru.

  1. Masuk ke Konsol ECS untuk membuat instance GPU.

    Pertama, buat instans GPU berbayar sesuai penggunaan untuk menyiapkan lingkungan dasar. Tutorial ini menggunakan instans ecs.gn7i-c8g1.2xlarge di Zona Ketersediaan J wilayah China (Hangzhou). Konfigurasikan instans sebagai berikut:

    1. Billing Method: Pay-As-You-Go.

    ②:Region. China (Hangzhou).

    ③④: Network and Zone. Pilih VPC dan vSwitch. Jika belum ada, Anda dapat membuatnya sesuai petunjuk di layar.

    ⑤⑥: Pilih tipe instans. Pilih ecs.gn7i-c8g1.2xlarge.

    ⑦⑧⑨: Images: Ubuntu 22.04 64-bit.

    ⑩: Instalasi otomatis driver GPU. Pilih versi: CUDA versi 12.4.1, Versi driver 550.127.08, dan CUDNN versi 9.2.0.82.

    ⑪: System Disk > Capacity. 60 GiB.

    ⑫⑬⑭: Tetapkan alamat IPv4 publik agar instans dapat mengakses internet dan mengunduh file model. Untuk Bandwidth Billing Method, pilih Pay-by-traffic. Untuk Maximum Bandwidth, pilih 100 Mbps.

    ⑮⑯⑰: Buat kelompok keamanan dasar baru. Buka setidaknya port SSH (TCP: 22) dan ICMP (IPv4) untuk mengizinkan koneksi jarak jauh.

    ⑱⑲⑳: Logon Credential. Kredensial ini digunakan untuk login ke instans. Anda dapat memilih pasangan kunci atau kata sandi. Ikuti petunjuk di layar untuk menyelesaikan konfigurasi.

    21:Instance Name. Tentukan nama untuk instans agar mudah diingat dan ditemukan. Topik ini menggunakan ess-lora-deepseek7b-template sebagai contoh.

    Setelah menyelesaikan konfigurasi, klik Confirm Order dan tunggu hingga instans dibuat.

  2. Setelah instans dibuat, sambungkan ke instans tersebut dan tunggu hingga driver GPU selesai diinstal.

    1. Buka Konsol ECS - Instans.

    2. Temukan instans yang Anda buat pada langkah sebelumnya, lalu klik Connect di kolom Actions. Sambungkan ke instans menggunakan Workbench dan login sesuai permintaan.

      Jika Anda tidak menemukan instans tersebut, wilayah yang sedang Anda gunakan mungkin tidak sesuai dengan wilayah instans. Anda dapat mengganti wilayah di pojok kiri atas.
      Jika instans berhenti, refresh halaman dan tunggu hingga instans mulai.
    3. Setelah terhubung ke instans, tunggu hingga instalasi driver GPU selesai. Setelah instalasi selesai, Anda akan diminta untuk menyambungkan ulang.

      Jika antarmuka membeku, coba refresh halaman dan sambungkan ulang ke instans.
      Welcome to Alibaba Cloud Elastic Compute Service !
      
      Last login: Tue Mar 18 21:12:39 2025 from xxx
        % Total    % Received % Xferd  Average Speed   Time    Time     Current
                                       Dload  Upload   Total   Spent    Left  Speed
      100    21  100    21    0     0    875      0 --:--:-- --:--:-- --:--:--   913
      
      Driver-xxx installing, it takes 0 minutes. Remaining installation time 11 to 15 minutes!
      [cuda-12.4.1. Installing, it tasks 2 to 5 minutes. Remaining installation time 9 to 12 minutes!

      Saya tidak melihat halaman ini. Bagaimana cara memverifikasi instalasi?

      Jika antarmuka ini tidak muncul setelah Anda terhubung ke instans, kemungkinan driver sudah terinstal. Anda dapat menjalankan perintah berikut untuk mengonfirmasi instalasi driver:

      nvidia-smi

      Jika output berikut muncul, instalasi telah selesai.

      root@ixxx:~# nvidia-smi
      Wed Mar 26 09:40:48 2025
      +-----------------------------------------------------------------------------------------+
      | NVIDIA-SMI 550.127.08    Driver Version: 550.127.08    CUDA Version: 12.4              |
      |-------------------------------------------+------------------------+-------------------|
      | GPU  Name        Persistence-M |  Bus-Id        Dis.A | Volatile Uncorr. ECC |
      | Fan  Temp  Perf    Pwr:Usage/Cap |                     | Memory-Usage | GPU-Util  Compute M. |
      |===========================================================================================|
      |  0   NVIDIA A10         On |  00000000:00:07.0 Off |                    0 |
      |  0%   27C    P8       9W / 150W |      1MiB / 23028MiB |      0%      Default |
      +-------------------------------------------+------------------------+-------------------+
      
      +-----------------------------------------------------------------------------------------+
      | Processes:                                                                               |
      |  GPU   GI   CI     PID   Type   Process name                         GPU Memory         |
      |        ID   ID                                                        Usage              |
      |=========================================================================================|
      |  No running processes found                                                              |
      +-----------------------------------------------------------------------------------------+

      Jika output ini tidak muncul, driver belum terinstal atau mengalami masalah. Kami menyarankan Anda membuat instans baru dan memilih Auto-install GPU driver selama penyiapan.

      Untuk menginstal driver secara manual, lihat Instalasi manual driver Tesla pada instans Linux komputasi dioptimalkan dengan akselerasi GPU.
  3. Instal dependensi Python.

    Jalankan perintah berikut untuk menginstal dependensi yang diperlukan untuk pelatihan.

    Gambar Ubuntu 22.04 64-bit yang digunakan dalam tutorial ini sudah mencakup Python 3.10, sehingga tidak diperlukan instalasi Python terpisah.
    # Gambar Ubuntu 22.04 sudah mencakup Python 3.10, sehingga tidak diperlukan instalasi tambahan.
    python3 -m pip install --upgrade pip
    # Beralih ke mirror PyPI internal Alibaba Cloud.
    pip config set global.index-url http://mirrors.cloud.aliyuncs.com/pypi/simple/
    
    pip install modelscope==1.22.3
    pip install openai==1.61.0
    pip install tqdm==4.67.1
    pip install "vllm>=0.5.1" -U
    pip install "lmdeploy>=0.5,<0.6.5" -U --no-deps
    pip install autoawq -U --no-deps
    pip install auto_gptq optimum bitsandbytes -U
    pip install ms-swift[all]
    pip install timm -U
    pip install deepspeed==0.14.* -U
    pip install qwen_vl_utils decord librosa pyav icecream -U
Sambil menunggu dependensi diinstal, Anda dapat mengklik ikon image di pojok kanan atas untuk membuka multi-terminal dan melanjutkan ke Langkah 1.2 secara bersamaan.

1.2 Buat dan pasang bucket OSS

Pada langkah ini, buat bucket di OSS dan pasang sebagai disk data ke Instance ECS. Bucket ini akan menyimpan file bobot model, dataset, dan checkpoint yang dihasilkan selama pelatihan.

  1. Buka Konsol OSS untuk membuat bucket.

    Berikut adalah parameter konfigurasi utama. Gunakan nilai default untuk parameter yang tidak disebutkan.

    2. Bucket. Anda akan menggunakan nama bucket ini saat memasang bucket nanti.

    3. Region. Pilih Region-specific. Wilayah harus sesuai dengan wilayah Instance ECS. Dalam contoh ini, wilayahnya adalah China (Hangzhou).

    Instance ECS dapat mengakses bucket OSS di wilayah yang sama melalui jaringan internal tanpa biaya trafik. Untuk informasi lebih lanjut, lihat Akses sumber daya OSS dari Instance ECS melalui jaringan internal.
  2. Buat dan lampirkan peran RAM.

    Peran RAM memberikan otorisasi kepada Instance ECS untuk mengakses bucket OSS Anda. Untuk membuat dan melampirkan peran RAM, ikuti langkah-langkah berikut:

    1. Di RAM, buat peran RAM. Parameter konfigurasi utama dijelaskan di bawah ini.

      Buka halaman Peran di konsol Resource Access Management (RAM) dan klik Create Role.

      ②: Jenis prinsipal. Pilih Cloud Service.

      ③: Nama prinsipal. Pilih ECS. Ini menentukan bahwa peran akan diberikan kepada Instance ECS.

      ④: Klik OK dan tetapkan nama untuk peran RAM sesuai permintaan.

    2. Di RAM, buat kebijakan kustom berikut.

      Buka halaman Kebijakan di konsol Resource Access Management (RAM) dan klik Create Policy.

      Pilih tab Script Editor dan masukkan skrip kebijakan berikut.

      ③: Kebijakan ini memberikan akses penuh ke bucket tertentu. Skrip kebijakan adalah sebagai berikut.

      Penting

      Saat menetapkan kebijakan, ganti <bucket_name> dengan Bucket Anda.

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": "oss:*",
                  "Resource": [
                      "acs:oss:*:*:<bucket_name>",
                      "acs:oss:*:*:<bucket_name>/*"
                  ]
              }
          ]
      }

      Setelah konfigurasi selesai, klik OK dan tetapkan nama untuk kebijakan sesuai permintaan.

    3. Di RAM, berikan izin kepada peran RAM.

      ⑥: Principal. Pilih peran RAM yang telah Anda buat sebelumnya.

      ⑦: Permission Policy. Pilih kebijakan kustom yang telah Anda buat sebelumnya.

      Setelah konfigurasi selesai, klik OK.

    4. Buka Konsol ECS dan lampirkan peran RAM ke instans tersebut.

      Jika Anda tidak menemukan instans tersebut, wilayah yang sedang Anda gunakan mungkin tidak sesuai dengan wilayah instans. Anda dapat mengganti wilayah di pojok kiri atas.

      Di daftar instans pada Konsol ECS, temukan instans target dan lampirkan peran RAM yang Anda buat di Langkah 1.2 dari kolom Tindakan.

  3. Pasang bucket ke Instance ECS.

    1. Sambungkan ke instans yang dibuat di Langkah 1.1 dan jalankan perintah berikut untuk menginstal tool ossfs.

      wget https://gosspublic.alicdn.com/ossfs/ossfs_1.91.5_ubuntu22.04_amd64.deb
      apt-get update
      DEBIAN_FRONTEND=noninteractive apt-get install gdebi-core
      DEBIAN_FRONTEND=noninteractive gdebi -n ossfs_1.91.5_ubuntu22.04_amd64.deb
    2. Jalankan perintah berikut untuk menyelesaikan operasi pemasangan. Pastikan untuk mengganti placeholder berikut dalam perintah:

      • <bucket_name>: Ganti dengan Bucket dari bucket yang Anda buat.

        Lihat nama bucket

        Buka Konsol OSS untuk menemukan bucket yang Anda buat.

      • <ecs_ram_role>: Ganti dengan nama Peran RAM yang telah Anda buat.

        Lihat nama peran RAM

        Buka Konsol ECS, temukan instans dengan peran RAM yang dilampirkan, lalu buka halaman Attach/Detach RAM Role

        . Di halaman ini, Anda dapat melihat peran RAM yang dilampirkan ke instans.

        Jika Anda tidak menemukan instans tersebut, wilayah yang sedang Anda gunakan mungkin tidak sesuai dengan wilayah instans. Anda dapat mengganti wilayah di pojok kiri atas.

        Di daftar instans Konsol ECS, temukan instans ess-lora-deepseek-7b-template dan lampirkan peran RAM yang dibuat di Langkah 1.2 dari kolom Tindakan.

      • <internal_endpoint>: Ganti dengan oss-cn-hangzhou-internal.aliyuncs.com.

        Penting

        Tutorial ini menggunakan bucket di wilayah China (Hangzhou), sehingga titik akhir internal VPC-nya adalah oss-cn-hangzhou-internal.aliyuncs.com.

        Cara mendapatkan titik akhir jika bucket Anda tidak berada di wilayah Hangzhou

        Jika bucket OSS Anda tidak berada di wilayah Hangzhou, dapatkan titik akhir internal VPC dan ganti nilai <internal_endpoint>.

        Di halaman Ikhtisar bucket Anda di Konsol OSS, temukan informasi Titik Akhir Akses. Dapatkan alamat titik akhir untuk Akses Jaringan VPC (Jaringan Internal) dari ECS (misalnya, oss-cn-hangzhou-internal.aliyuncs.com).

      # Ganti dengan nama bucket, titik akhir internal, dan peran RAM Anda.
      BUCKET_NAME="<bucket_name>"
      ECS_RAM_ROLE="<ecs_ram_role>"
      INTERNAL_ENDPOINT="<internal_endpoint>"
      
      # Jalur pemasangan bucket
      BUCKET_MOUNT_PATH="/mnt/oss-data"
      
      # 1. Cadangkan file fstab sebelum memasang.
      cp /etc/fstab /etc/fstab.bak
      
      # 2. Buat direktori pemasangan.
      mkdir $BUCKET_MOUNT_PATH
      # 3. Pasang bucket ke instans.
      ossfs $BUCKET_NAME $BUCKET_MOUNT_PATH -ourl=$INTERNAL_ENDPOINT -oram_role=http://100.100.100.200/latest/meta-data/ram/security-credentials/$ECS_RAM_ROLE
      # 4. Atur pemasangan otomatis saat startup.
      echo "ossfs#$BUCKET_NAME $BUCKET_MOUNT_PATH fuse _netdev,url=http://$INTERNAL_ENDPOINT,ram_role=http://100.100.100.200/latest/meta-data/ram/security-credentials/$ECS_RAM_ROLE,allow_other 0 0" | sudo tee -a /etc/fstab
  4. (Verifikasi) Uji apakah storage space tersedia.

    1. Unggah file apa pun ke bucket OSS.

      Di Konsol OSS, buka halaman File bucket Anda. Klik Upload File dan unggah file uji untuk memverifikasi pemasangan.

    2. Di instans, jalankan perintah berikut untuk memeriksa apakah Anda dapat melihat file dari bucket OSS di direktori tersebut.

      ls /mnt/oss-data/

      Jika file terlihat, pemasangan berhasil.

      root@ixxx:~# ls /mnt/oss-data/
      test.txt

    Mengapa saya tidak melihat file di bucket OSS?

    Hal ini mungkin disebabkan oleh kegagalan pemasangan. Ikuti langkah-langkah berikut untuk pemecahan masalah:

    1. Periksa apakah Instance ECS dan bucket OSS berada di wilayah yang sama. Pastikan bahwa <internal_endpoint> dalam perintah pemasangan telah diganti dengan benar menggunakan titik akhir internal VPC bucket.

    2. Periksa apakah <bucket_name> dalam perintah pemasangan telah diganti dengan benar menggunakan nama bucket OSS Anda.

    3. Coba lampirkan ulang peran RAM ke Instance ECS. Juga, periksa apakah <ecs_ram_role> dalam perintah pemasangan sesuai dengan nama peran RAM yang dilampirkan.

    4. Ganti dengan benar <bucket_name>, <internal_endpoint>, dan <ecs_ram_role> dalam perintah berikut, lalu jalankan untuk memasang ulang.

      # Ganti dengan nama bucket, titik akhir internal, dan peran RAM Anda.
      BUCKET_NAME="<bucket_name>"
      ECS_RAM_ROLE="<ecs_ram_role>"
      INTERNAL_ENDPOINT="<internal_endpoint>"
      
      # Jalur pemasangan bucket
      BUCKET_MOUNT_PATH="/mnt/oss-data"
      
      # 1. Coba lepas pemasangan.
      umount $BUCKET_MOUNT_PATH
      
      # 2. Pulihkan /etc/fstab dari cadangan.
      cp /etc/fstab.bak /etc/fstab
      
      # 3. Pasang ulang bucket ke instans.
      ossfs $BUCKET_NAME $BUCKET_MOUNT_PATH -ourl=$INTERNAL_ENDPOINT -oram_role=http://100.100.100.200/latest/meta-data/ram/security-credentials/$ECS_RAM_ROLE
      # 4. Aktifkan ulang pemasangan otomatis saat startup.
      echo "ossfs#$BUCKET_NAME $BUCKET_MOUNT_PATH fuse _netdev,url=http://$INTERNAL_ENDPOINT,ram_role=http://100.100.100.200/latest/meta-data/ram/security-credentials/$ECS_RAM_ROLE,allow_other 0 0" | sudo tee -a /etc/fstab
    1. Periksa apakah Anda dapat melihat file dari bucket OSS di direktori pemasangan (/mnt/oss-data).

      ls /mnt/oss-data/

1.3 Siapkan model dan dataset

Bobot model dan dataset yang digunakan dalam tutorial ini diunduh dari komunitas ModelScope. Setelah Anda terhubung ke instans, ikuti langkah-langkah di bawah ini. Unduh model dan dataset ke direktori tempat bucket OSS dipasang dan tunggu hingga pengunduhan selesai.

  1. Unduh dataset

    # Jalur pemasangan bucket
    BUCKET_MOUNT_PATH="/mnt/oss-data"
    
    # Unduh dataset fine-tuning dari komunitas ModelScope
    # Gunakan tool modelscope yang diinstal di Langkah 1.1
    modelscope download --dataset swift/self-cognition --local_dir $BUCKET_MOUNT_PATH/self-cognition
    modelscope download --dataset AI-ModelScope/alpaca-gpt4-data-zh --local_dir $BUCKET_MOUNT_PATH/alpaca-gpt4-data-zh
    modelscope download --dataset AI-ModelScope/alpaca-gpt4-data-en --local_dir $BUCKET_MOUNT_PATH/alpaca-gpt4-data-en
    Jika progres pengunduhan berhenti, tekan Enter beberapa kali.
  2. Unduh bobot model

    Penting

    File bobot model berukuran besar. Jika pengunduhan gagal atau Anda melihat pesan please try again, ulangi perintah untuk melanjutkan pengunduhan.

    # Jalur pemasangan bucket
    BUCKET_MOUNT_PATH="/mnt/oss-data"
    
    # Unduh model DeepSeek-R1-Distill-Qwen-7B dari komunitas ModelScope
    modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --local_dir $BUCKET_MOUNT_PATH/DeepSeek-R1-Distill-Qwen-7B
    Jika progres pengunduhan berhenti, tekan Enter beberapa kali.
  3. Uji bobot model

    Setelah pengunduhan selesai, Anda dapat menjalankan perintah berikut untuk melakukan uji inferensi dengan model dan memverifikasi bahwa file bobot model lengkap.

    # Jalur pemasangan bucket
    BUCKET_MOUNT_PATH="/mnt/oss-data"
    
    CUDA_VISIBLE_DEVICES=0 swift infer \
        --model $BUCKET_MOUNT_PATH/DeepSeek-R1-Distill-Qwen-7B \
        --stream true \
        --infer_backend pt \
        --max_new_tokens 2048

    Setelah model dimuat, Anda dapat memulai percakapan dengan model bahasa besar. Jika bobot model gagal dimuat, unduh kembali.

    [INFO:swift] Start time of running main: 2025-03-26 13:35:50.564493
    [INFO:swift] request_config: RequestConfig(max_tokens=2048, temperature=None, top_k=None, top_p=None, repetition_penalty=None, num_beams=1, stop=[], seed=None, stream=True, logprobs=False, top_logprobs=None, n=1, best_of=None, presence_penalty=0.0, frequency_penalty=0.0, length_penalty=1.0)
    [INFO:swift] Input 'exit' or 'quit' to exit the conversation.
    [INFO:swift] Input 'multi-line' to switch to multi-line input mode.
    [INFO:swift] Input 'reset-system' to reset the system and clear the history.
    [INFO:swift] Input 'clear' to clear the history.
    <<< 你是谁?

    Setelah pengujian selesai, Anda dapat memasukkan exit untuk mengakhiri percakapan.

1.4 Tulis skrip pelatihan otomatis

  1. Tulis skrip pelatihan otomatis.

    Jalankan perintah berikut untuk membuat skrip pelatihan otomatis dan berikan izin eksekusi. Skrip ini secara otomatis melanjutkan pelatihan dari checkpoint terbaru dan menentukan kapan pelatihan selesai.

    # Buat skrip pelatihan otomatis.
    cat <<EOF > /root/train.sh
    #!/bin/bash
    
    # Jalur pemasangan bucket
    BUCKET_MOUNT_PATH="/mnt/oss-data"
    
    # Direktori penyimpanan untuk bobot model dan dataset
    MODEL_PATH="\$BUCKET_MOUNT_PATH/DeepSeek-R1-Distill-Qwen-7B"
    DATASET_PATH="\$BUCKET_MOUNT_PATH/alpaca-gpt4-data-zh#500 \$BUCKET_MOUNT_PATH/alpaca-gpt4-data-en#500 \$BUCKET_MOUNT_PATH/self-cognition#500"
    
    # Tetapkan direktori output
    OUTPUT_DIR="\$BUCKET_MOUNT_PATH/output"
    mkdir -p "\$OUTPUT_DIR"
    
    # Logika untuk memeriksa apakah pelatihan sudah selesai
    if [ -f "\$OUTPUT_DIR/logging.jsonl" ]; then
        last_line=\$(tail -n 1 "\$OUTPUT_DIR/logging.jsonl")
        if echo "\$last_line" | grep -q "last_model_checkpoint" && echo "\$last_line" | grep -q "best_model_checkpoint"; then
            echo "Pelatihan sudah selesai. Keluar."
            exit 0
        fi
    fi
    
    # Inisialisasi argumen resume
    RESUME_ARG=""
    
    # Temukan checkpoint terbaru
    LATEST_CHECKPOINT=\$(ls -dt \$OUTPUT_DIR/checkpoint-* 2>/dev/null | head -1)
    
    if [ -n "\$LATEST_CHECKPOINT" ]; then
        RESUME_ARG="--resume_from_checkpoint \$LATEST_CHECKPOINT"
        echo "Lanjutkan pelatihan dari: \$LATEST_CHECKPOINT"
    else
        echo "Checkpoint tidak ditemukan. Memulai pelatihan baru."
    fi
    
    # Jalankan perintah pelatihan
    CUDA_VISIBLE_DEVICES=0 swift sft \\
        --model \$MODEL_PATH \\
        --train_type lora \\
        --dataset \$DATASET_PATH \\
        --torch_dtype bfloat16 \\
        --num_train_epochs 1 \\
        --per_device_train_batch_size 1 \\
        --per_device_eval_batch_size 1 \\
        --learning_rate 1e-4 \\
        --lora_rank 8 \\
        --lora_alpha 32 \\
        --target_modules all-linear \\
        --gradient_accumulation_steps 16 \\
        --eval_steps 50 \\
        --save_steps 10 \\
        --save_total_limit 5 \\
        --logging_steps 5 \\
        --max_length 2048 \\
        --output_dir "\$OUTPUT_DIR" \\
        --add_version False \\
        --overwrite_output_dir True \\
        --system 'You are a helpful assistant.' \\
        --warmup_ratio 0.05 \\
        --dataloader_num_workers 4 \\
        --model_author swift \\
        --model_name swift-robot \\
        \$RESUME_ARG
    EOF
    
    # Berikan izin eksekusi
    chmod +x /root/train.sh

    Uji apakah skrip berjalan dengan benar

    Jalankan perintah berikut untuk menguji apakah skrip berjalan dengan benar:

    ./train.sh

    Jika model dimuat dan pelatihan dimulai secara normal setelah Anda menjalankan perintah, ini mengonfirmasi bahwa file model benar dan semua dependensi tersedia. Tekan CTRL + C untuk keluar dari pelatihan.

    Train:   0%|          | 0/93 [00:00<?, ?it/s]

    Jika tidak berjalan dengan benar, instal ulang dependensi Python dari Langkah 1.1 dan unduh ulang bobot serta dataset dari Langkah 1.3.

  2. Buat layanan Linux dan atur untuk mulai saat boot.

    Jalankan perintah berikut untuk membuat layanan dan mengonfigurasi skrip pelatihan agar berjalan otomatis saat boot.

    # Buat direktori penyimpanan log
    mkdir -p /root/train-service-log
    
    # Tulis file konfigurasi Layanan
    cat <<EOF > /etc/systemd/system/train.service
    [Unit]
    Description=Train AI Model Script
    After=network.target local-fs.target remote-fs.target
    Requires=local-fs.target remote-fs.target
    
    [Service]
    ExecStart=/root/train.sh
    WorkingDirectory=/root/
    User=root
    Environment="PATH=/usr/bin:/usr/local/bin"
    Environment="CUDA_VISIBLE_DEVICES=0"
    StandardOutput=append:/root/train-service-log/train.log
    StandardError=append:/root/train-service-log/train_error.log
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    # Muat ulang konfigurasi systemd
    systemctl daemon-reload
    # Konfigurasikan train.service untuk mulai saat boot
    systemctl enable train.service

    Perintah mengembalikan output berikut setelah selesai:

    Created symlink /etc/systemd/system/multi-user.target.wants/train.service → /etc/systemd/system/train.service.

1.5 Bangun gambar kustom

Setelah menyelesaikan semua langkah sebelumnya, buat gambar kustom dari instans yang telah dikonfigurasi. Gambar ini berfungsi sebagai gambar peluncuran untuk instans baru selama scale-out, sehingga menghilangkan kebutuhan untuk menginstal ulang dependensi.

  1. Buka halaman Instans di Konsol ECS.

  2. Buat gambar seperti dijelaskan di bawah ini.

    Di daftar instans pada Konsol ECS, temukan instans target. Di kolom Tindakan, klik More > Disks and Images > Create Custom Image. Selesaikan pembuatan gambar sesuai permintaan.

  3. Tunggu hingga gambar selesai dibuat. Proses ini memakan waktu sekitar 5 menit. Anda dapat memeriksa progres pembuatan di halaman Gambar di Konsol ECS.

Catatan

Setelah gambar dibuat, Anda dapat melepas instans yang dibuat di Langkah 1.1.

2. Buat grup penskalaan

Konfigurasikan grup penskalaan untuk mengotomatiskan manajemen instans. Grup penskalaan memastikan bahwa setelah instans terganggu, instans spot atau pay-as-you-go baru secara otomatis dibuat untuk melanjutkan tugas pelatihan. Ketika spot instans tersedia kembali, instans tersebut secara otomatis menggantikan instans pay-as-you-go untuk menghemat biaya.

2.1 Buat grup penskalaan

Pertama, Anda perlu membuat grup penskalaan. Ikuti langkah-langkah berikut.

  1. Buka Konsol Auto Scaling untuk membuat grup penskalaan.

    Penting

    Pastikan grup penskalaan berada di wilayah yang sama dengan instans yang dibuat di Langkah 1.1.

  1. Konfigurasikan grup penskalaan sebagai berikut. Untuk deskripsi parameter terperinci, lihat Parameter.

    Konfigurasikan parameter berikut: Tetapkan Nama Grup Penskalaan menjadi ess-lora-deepseek-7b, Jenis menjadi ECS, dan Sumber untuk Konfigurasi Instans menjadi Instans yang Ada. Tetapkan Instans Minimum menjadi 0, Instans Maksimum menjadi 1, dan biarkan Waktu Tunda Default pada 300 detik.

    Penting

    Saat Anda memilih VPC dan vSwitch di ⑤⑥, kami menyarankan Anda memilih vSwitch di beberapa zona ketersediaan. Hal ini memungkinkan grup penskalaan menyediakan sumber daya lintas zona, meningkatkan probabilitas keberhasilan pembuatan spot instans.

    Penting

    Jika Anda ingin memaksimalkan penghematan biaya dengan hanya menggunakan spot instans untuk pelatihan, nonaktifkan Use Pay-as-you-go Instances to Supplement Spot Capacity dan Replace Pay-as-you-go Instances with Spot Instances.

  1. Setelah konfigurasi selesai, klik Create. Anda kemudian dapat melanjutkan untuk membuat konfigurasi penskalaan sesuai permintaan.

2.2 Buat konfigurasi penskalaan

Konfigurasi penskalaan menentukan spesifikasi, gambar, dan informasi lain untuk instans dalam grup penskalaan. Setelah Anda mengonfigurasinya, grup penskalaan secara otomatis membuat instans baru berdasarkan pengaturan ini. Di halaman Buat Konfigurasi Penskalaan, selesaikan konfigurasi berikut:

Tidak berada di halaman Create Scaling Configuration?

Anda dapat kembali ke halaman Create Scaling Configuration dengan mengikuti langkah-langkah berikut.

  1. Buka Konsol Auto Scaling.

    Penting

    Pastikan grup penskalaan berada di wilayah yang sama dengan instans yang dibuat di Langkah 1.1.

  2. Di daftar grup penskalaan, temukan grup penskalaan yang dibuat di Langkah 2.1 dan klik ID-nya untuk membuka halaman detail. Ikuti langkah-langkah berikut untuk menuju halaman Buat Konfigurasi Penskalaan.

    Di halaman detail grup penskalaan, beralih ke tab Konfigurasi Penskalaan dan klik Create Scaling Configuration.

1. Scaling Configuration Name: ess-config.

②: Billing Method: Spot Instance.

③ dan ④: Image. Pilih Custom Images, lalu pilih gambar kustom yang Anda buat di Langkah 1.5.

⑤: Instance Configuration Mode. Pilih Specify Instance Type.

6. Instance Usage Duration. Pilih 1 Hour. Setelah instance berjalan selama satu jam, sistem akan mulai memeriksa apakah instance tersebut akan diinterupsi dan ditarik kembali.

Jika Anda memilih Tanpa Durasi Penggunaan Tertentu, Anda dapat menggunakan spot instans dengan biaya lebih rendah, tetapi memiliki probabilitas gangguan yang lebih tinggi. Hal ini dapat menyebabkan instans ditarik kembali sebelum checkpoint yang valid dapat dibuat, sehingga memperlambat progres pelatihan. Untuk informasi lebih lanjut tentang perbedaan antara kedua opsi ini, lihat Gunakan spot instans dalam grup penskalaan untuk mengurangi biaya.

⑦: Harga tertinggi per instans. Pilih Use Automatic Bid untuk secara otomatis menawar berdasarkan harga pasar.

8. Select an instance type. Pilih tipe instans yang Anda tetapkan saat membuat instans di Langkah 1.1, yaitu ecs.gn7i-c8g1.2xlarge.

9. Security Group. Pilih grup keamanan yang Anda konfigurasi saat membuat instans di Langkah 1.1.

Tutorial ini merupakan solusi pelatihan offline, sehingga tidak perlu menetapkan alamat IP publik.

⑩:Logon Credential. Pilih Use Predefined Password.

⑪⑫⑬: Advanced Settings > Instance RAM Role. Pilih peran RAM yang dibuat di Langkah 1.2. Saat grup penskalaan secara otomatis membuat instans, peran RAM ini akan secara otomatis dilampirkan ke instans baru.

Catatan

Setelah Anda mengklik Create, Anda mungkin melihat prompt tentang kekuatan konfigurasi penskalaan tidak mencukupi. Klik Continue.

Setelah membuat konfigurasi penskalaan, aktifkan konfigurasi penskalaan dan aktifkan grup penskalaan sesuai permintaan.

Setelah konfigurasi penskalaan berhasil dibuat, klik Enable Configuration di kotak dialog yang muncul.

Di kotak dialog konfirmasi Select Scaling Configuration, klik OK.

Di kotak dialog konfirmasi Enable Scaling Group, klik OK untuk mengaktifkan grup penskalaan.

3. Mulai tugas pelatihan

Setelah grup penskalaan dikonfigurasi, sesuaikan jumlah instans yang diharapkan menjadi 1. Langkah-langkahnya sebagai berikut.

Buka halaman detail grup penskalaan dan lihat Ikhtisar Penskalaan Instans. Jumlah instans saat ini semuanya 0.

Klik Modify di bagian Ikhtisar Penskalaan Instans. Aktifkan sakelar Jumlah Instans yang Diharapkan, tetapkan nilainya menjadi 1, lalu klik OK. Grup penskalaan akan secara otomatis membuat spot instans.

Grup penskalaan kemudian secara otomatis membuat instans baru dan memulai tugas pelatihan.

Grup penskalaan secara berkala memeriksa apakah jumlah instans dalam grup sesuai dengan jumlah instans yang diharapkan. Karena jumlah saat ini adalah 0, scale-out secara otomatis dipicu untuk membuat instans baru.
Catatan
  • Setelah Anda menyesuaikan jumlah instans yang diharapkan, mungkin terjadi penundaan dalam pembuatan instans. Anda dapat melihat aktivitas yang sedang berlangsung di tab Scaling Activities.

  • Setelah instans dibuat dan dimulai, Anda dapat menemukan folder output di bucket OSS Anda. Folder ini menyimpan file checkpoint yang dihasilkan selama pelatihan.

4. Simulasikan gangguan (verifikasi)

Setelah instans memulai tugas pelatihan, periksa direktori output di bucket OSS Anda untuk melihat apakah folder seperti checkpoint-10 telah dibuat. Setelah checkpoint dihasilkan, Anda dapat melepaskan instans pelatihan secara manual untuk mensimulasikan gangguan. Langkah-langkah untuk melepaskan instans secara manual adalah sebagai berikut:

  1. Lepaskan instans secara manual.

    1. Pertama, buka tab Instances pada grup penskalaan, lalu klik Instance ID untuk membuka halaman Instance Details yang sesuai.

    2. Di halaman detail instans, klik All Operations > Release di pojok kanan atas dan ikuti petunjuk untuk melepaskan instans.

  2. Periksa apakah pelatihan dilanjutkan dari checkpoint terbaru.

    Tunggu hingga grup penskalaan membuat instans baru. Setelah instans dibuat, sambungkan ke instans tersebut dan lihat log tugas.

    1. Buka tab Instances pada grup penskalaan, lalu klik Instance ID untuk membuka halaman Instance Details yang sesuai.

    2. Klik Connect di pojok kanan atas dan sambungkan ke instans sesuai permintaan.

    3. Jalankan perintah berikut untuk melihat log pelatihan model. Jalur output log ini telah ditetapkan untuk layanan boot-start di Langkah 1.4.

      cat /root/train-service-log/train.log

      Seperti yang terlihat, tugas pelatihan dilanjutkan dari checkpoint terbaru.

      root@ixxx:~# cat train-service-log/train.log
      Resume training from: /mnt/oss-data/output/checkpoint-10
      run sh: /usr/bin/python3 /usr/local/lib/python3.10/dist-packages/xxx
        s-data/self-cognition#500 --torch_dtype bfloat16 --num_train_epochs xxx
        --eval_steps 50 --save_steps 10 --save_total_limit 5 --logging_steps xxx
        --num_workers 4 --model_author swift --model_name swift-robot --resume xxx

Langkah selanjutnya

Gunakan model yang telah difine-tuning untuk inferensi

Setelah tugas fine-tuning selesai, folder checkpoint-93 dihasilkan di direktori output bucket OSS. Anda kemudian dapat menyambungkan ke instans dan menjalankan perintah berikut untuk berinteraksi dengan model yang telah difine-tuning.

# Jalur pemasangan bucket
BUCKET_MOUNT_PATH="/mnt/oss-data"

# Tetapkan direktori output
OUTPUT_DIR="$BUCKET_MOUNT_PATH/output"

# Temukan checkpoint terbaru
LATEST_CHECKPOINT=$(ls -dt $OUTPUT_DIR/checkpoint-* 2>/dev/null | head -1)

CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --adapters $LATEST_CHECKPOINT \
    --stream true \
    --temperature 0 \
    --max_new_tokens 2048
[INFO:swift] Start time of running main: 2025-03-26 15:15:11.595764
[INFO:swift] request_config: RequestConfig(max_tokens=2048, temperature=0.0, top_k=None, top_p=None, repetition_penalty=None, num_beams=1, stop=[], seed=None, stream=True, logprobs=False, top_logprobs=None, n=1, best_of=None, presence_penalty=0.0, frequency_penalty=0.0, length_penalty=1.0)
[INFO:swift] Input 'exit' or 'quit' to exit the conversation.
[INFO:swift] Input 'multi-line' to switch to multi-line input mode.
[INFO:swift] Input 'reset-system' to reset the system and clear the history.
[INFO:swift] Input 'clear' to clear the history.
<<< 你是谁?

Lepaskan sumber daya

Untuk menghindari biaya tambahan, Anda dapat melepaskan sumber daya yang digunakan dalam tutorial ini dengan mengikuti langkah-langkah berikut.

  1. Hapus grup penskalaan. Menghapus grup penskalaan yang dibuat di Langkah 2 juga akan menghapus instans yang secara otomatis dibuatnya.

  2. Hapus gambar kustom. Hapus gambar kustom yang dibuat di Langkah 1.5.

  3. Hapus bucket. Hapus bucket OSS yang dibuat di Langkah 1.2.

  4. Hapus peran RAM. Hapus peran RAM yang dibuat di Langkah 1.2.

  5. Lepaskan instans. Lepaskan instans yang dibuat di Langkah 1.1.

Rekomendasi untuk lingkungan produksi

Sebelum menggunakan solusi ini di produksi, sesuaikan berdasarkan kebutuhan bisnis Anda dan rekomendasi berikut.

  • Integrasikan CloudMonitor untuk penanganan gangguan

    Saat menerapkan solusi ini di lingkungan produksi, kami menyarankan Anda mengintegrasikan CloudMonitor ke dalam kode pelatihan Anda untuk mendeteksi dan merespons event gangguan spot instans. Menyimpan checkpoint lima menit sebelum gangguan mengurangi kehilangan progres saat melanjutkan pelatihan. Arsitektur yang ditingkatkan adalah sebagai berikut:

    image

  • Buat mekanisme pemulihan tugas

    Dalam contoh tutorial ini, pelatihan dilanjutkan secara otomatis dari checkpoint terbaru tanpa memeriksa validitasnya. Dalam aplikasi produksi, disarankan untuk menerapkan mekanisme deteksi anomali untuk mengecualikan checkpoint yang tidak valid dan secara otomatis melanjutkan pelatihan dari checkpoint valid terbaru.

  • Tingkatkan proses penyelesaian tugas

    Anda dapat menambahkan logika ke dalam kode pelatihan Anda untuk menentukan kapan tugas selesai. Setelah selesai, gunakan CLI atau SDK untuk memanggil API grup penskalaan dan mengubah jumlah instans yang diharapkan menjadi 0. Grup penskalaan kemudian secara otomatis melepaskan instans berlebih, menghindari biaya yang tidak perlu.

    Selain itu, saat tugas selesai, Anda dapat melaporkan event kustom ke CloudMonitor. Hal ini memungkinkan Anda menerima notifikasi tentang hasil pelatihan melalui email, SMS, atau chatbot DingTalk.

  • Gunakan sistem file berkinerja-tinggi

    Saat Anda melatih model dengan jumlah parameter yang besar, OSS dapat menjadi bottleneck sistem. Kami menyarankan Anda menggunakan sistem file ber-throughput tinggi dan latensi rendah seperti CPFS sebagai sistem file yang dipasang untuk meningkatkan kinerja.

  • Konfigurasikan vSwitch multi-AZ untuk ketersediaan lebih tinggi

    Jika Anda mengonfigurasi vSwitch hanya di satu zona ketersediaan, grup penskalaan hanya dapat membuat instans di zona tersebut, yang dapat dengan mudah menyebabkan kegagalan scale-out akibat kapasitas tidak mencukupi. Kami menyarankan Anda mengonfigurasi vSwitch di beberapa zona ketersediaan. Saat spot instans ditarik kembali, sistem secara otomatis mencoba membuat instans baru di zona lain, meningkatkan ketersediaan spot instans.

Referensi