Rumah > Peranti teknologi > AI > Kuantisasi Berat Rangkaian Neural

Kuantisasi Berat Rangkaian Neural

Joseph Gordon-Levitt
Lepaskan: 2025-03-08 10:40:10
asal
695 orang telah melayarinya

Pada usia model bahasa yang semakin besar dan rangkaian saraf kompleks, mengoptimumkan kecekapan model telah menjadi yang paling utama. Kuantisasi berat menonjol sebagai teknik penting untuk mengurangkan saiz model dan meningkatkan kelajuan kesimpulan tanpa kemerosotan prestasi yang signifikan. Panduan ini menyediakan pendekatan tangan untuk melaksanakan dan memahami kuantisasi berat badan, menggunakan GPT-2 sebagai contoh praktikal kami.

Objektif Pembelajaran

  • memahami asas kuantisasi berat badan dan kepentingannya dalam pengoptimuman model.
  • Ketahui perbezaan antara teknik kuantisasi absmax dan sifar.
  • Melaksanakan kaedah kuantisasi berat pada GPT-2 menggunakan pytorch.
  • menganalisis kesan kuantisasi pada kecekapan memori, kelajuan kesimpulan, dan ketepatan.
  • menggambarkan pengagihan berat kuantitatif menggunakan histogram untuk wawasan.
  • Menilai prestasi model pasca kuantitatif melalui penjanaan teks dan metrik kebingungan.
  • meneroka kelebihan kuantisasi untuk menggunakan model pada peranti yang terkawal sumber.
Artikel ini diterbitkan sebagai sebahagian daripada Blogathon Sains Data

Jadual Kandungan Memahami Fundamental Kuantisasi Berat Pelaksanaan Praktikal

Proses kuantisasi: Berat dan Model

Soalan

  • Memahami asas kuantisasi berat
  • Kuantisasi berat menukarkan berat terapung-ketepatan tinggi (biasanya 32-bit) kepada perwakilan ketepatan yang lebih rendah (bilangan integer 8-bit). Proses ini dengan ketara mengurangkan saiz model dan penggunaan memori semasa cuba mengekalkan prestasi model. Cabaran utama terletak pada mengekalkan ketepatan model semasa mengurangkan ketepatan berangka.
  • Kenapa kuantisasi?
  • Kecekapan memori:
  • Mengurangkan ketepatan dari 32-bit ke 8-bit secara teorinya dapat mengurangkan saiz model sebanyak 75%
  • kesimpulan yang lebih cepat:
  • operasi integer biasanya lebih cepat daripada operasi terapung
Penggunaan kuasa yang lebih rendah:

jalur lebar memori yang dikurangkan dan pengiraan yang lebih mudah membawa kepada penjimatan tenaga

fleksibiliti penyebaran:

model yang lebih kecil boleh digunakan pada peranti yang terkawal sumber

  • Pelaksanaan Praktikal mari kita menyelam untuk melaksanakan dua kaedah kuantisasi popular: kuantisasi absmax dan kuantisasi sifar.
  • menyediakan persekitaran Pertama, kami akan menubuhkan persekitaran pembangunan kami dengan kebergantungan yang diperlukan:
  • Di bawah kita akan melihat kaedah kuantisasi:

    kuantisasi absmax

    Kaedah kuantisasi Absmax skala berat berdasarkan nilai mutlak maksimum dalam tensor:

    import seaborn as sns
    import torch
    import numpy as np
    from transformers import AutoModelForCausalLM, AutoTokenizer
    from copy import deepcopy
    import matplotlib.pyplot as plt
    import matplotlib.ticker as ticker
    import seaborn as sns
    Salin selepas log masuk
    Salin selepas log masuk

    Kaedah ini berfungsi dengan:

    • Mencari nilai mutlak maksimum dalam tensor berat
    • mengira faktor skala agar sesuai dengan nilai dalam julat int8
    • penskalaan dan bulat nilai
    • Menyediakan kedua -dua versi kuantitatif dan dequanized

    Kelebihan Utama:

    • Pelaksanaan mudah
    • pemeliharaan nilai besar yang baik
    • kuantisasi simetri sekitar sifar

    Kuantisasi Zero-titik

    kuantisasi sifar-titik menambah offset untuk mengendalikan pengagihan asimetrik yang lebih baik:

    # Define quantization functions
    def absmax_quantize(X):
        scale = 100 / torch.max(torch.abs(X))  # Adjusted scale
        X_quant = (scale * X).round()
        X_dequant = X_quant / scale
        return X_quant.to(torch.int8), X_dequant
    Salin selepas log masuk
    Salin selepas log masuk

    output:

    def zeropoint_quantize(X):
        x_range = torch.max(X) - torch.min(X)
        x_range = 1 if x_range == 0 else x_range
        scale = 200 / x_range
        zeropoint = (-scale * torch.min(X) - 128).round()
        X_quant = torch.clip((X * scale + zeropoint).round(), -128, 127)
        X_dequant = (X_quant - zeropoint) / scale
        return X_quant.to(torch.int8), X_dequant
    Salin selepas log masuk

    Kaedah ini:

    • mengira pelbagai nilai
    • Menentukan parameter skala dan sifar titik
    • menggunakan skala dan beralih
    • nilai klip untuk memastikan batas int8

    Manfaat:

    • pengendalian pengedaran asimetrik yang lebih baik
    • Perwakilan yang lebih baik daripada nilai-nilai berhampiran-sifar
    • sering menghasilkan ketepatan keseluruhan yang lebih baik

    Memuat dan menyediakan model

    mari kita gunakan kaedah kuantisasi ini kepada model sebenar. Kami akan menggunakan GPT-2 sebagai contoh kami:

    Using device: cuda
    Salin selepas log masuk

    output:

    Kuantisasi Berat Rangkaian Neural

    Proses Kuantisasi: Berat dan Model

    menyelam ke dalam penggunaan teknik kuantisasi kepada kedua -dua berat individu dan keseluruhan model. Langkah ini memastikan mengurangkan penggunaan memori dan kecekapan pengiraan semasa mengekalkan prestasi.

    # Load model and tokenizer
    model_id = 'gpt2'
    model = AutoModelForCausalLM.from_pretrained(model_id).to(device)
    tokenizer = AutoTokenizer.from_pretrained(model_id)
    
    # Print model size
    print(f"Model size: {model.get_memory_footprint():,} bytes")
    Salin selepas log masuk
    Menggambarkan pengagihan berat kuantitatif

    memvisualisasikan dan membandingkan pengagihan berat model asal, absmax kuantitatif, dan sifar-titik kuantitatif. Histogram ini memberikan gambaran tentang bagaimana kuantisasi memberi kesan kepada nilai berat badan dan pengedaran keseluruhannya.

    # Quantize and visualize weights
    weights_abs_quant, _ = absmax_quantize(weights)
    weights_zp_quant, _ = zeropoint_quantize(weights)
    
    
    # Quantize the entire model
    model_abs = deepcopy(model)
    model_zp = deepcopy(model)
    
    for param in model_abs.parameters():
        _, dequantized = absmax_quantize(param.data)
        param.data = dequantized
    
    for param in model_zp.parameters():
        _, dequantized = zeropoint_quantize(param.data)
        param.data = dequantized
    Salin selepas log masuk
    Kod ini termasuk fungsi visualisasi yang komprehensif:

      Grafik memaparkan berat asal vs berat absmax
    • Grafik memaparkan berat asal vs berat sifar-titik

    output:

    Kuantisasi Berat Rangkaian Neural

    Penilaian Prestasi Kuantisasi Berat Rangkaian Neural

    Menilai kesan kuantisasi pada prestasi model adalah penting untuk memastikan kecekapan dan ketepatan. Mari ukur seberapa baik model kuantitatif dilakukan berbanding dengan asal.

    Generasi Teks

    meneroka bagaimana model kuantitatif menghasilkan teks dan membandingkan kualiti output ke ramalan model asal.

    import seaborn as sns
    import torch
    import numpy as np
    from transformers import AutoModelForCausalLM, AutoTokenizer
    from copy import deepcopy
    import matplotlib.pyplot as plt
    import matplotlib.ticker as ticker
    import seaborn as sns
    Salin selepas log masuk
    Salin selepas log masuk

    Kod ini membandingkan output generasi teks dari tiga model: model kuantitatif asal, "absmax", dan model kuantitatif "zeropoint". Ia menggunakan fungsi Generate_Text untuk menghasilkan teks berdasarkan prompt input, memohon pensampelan dengan nilai top-K sebanyak 30. Akhirnya, ia mencetak hasil dari ketiga-tiga model.

    output:

    Kuantisasi Berat Rangkaian Neural

    Kod mengira kebingungan (ukuran seberapa baik model meramalkan teks) untuk input yang diberikan menggunakan tiga model: model asal, "Absmax" dan "Zeropoint" yang asal. Kebingungan yang lebih rendah menunjukkan prestasi yang lebih baik. Ia mencetak skor kebingungan untuk perbandingan.
    # Define quantization functions
    def absmax_quantize(X):
        scale = 100 / torch.max(torch.abs(X))  # Adjusted scale
        X_quant = (scale * X).round()
        X_dequant = X_quant / scale
        return X_quant.to(torch.int8), X_dequant
    Salin selepas log masuk
    Salin selepas log masuk

    output:

    anda boleh mengakses pautan colab di sini. Kuantisasi Berat Rangkaian Neural

    kelebihan kuantisasi berat

    di bawah kita akan melihat kelebihan kuantisasi berat:

    Kecekapan memori:
      Kuantisasi mengurangkan saiz model sehingga 75%, membolehkan pemuatan dan kesimpulan yang lebih cepat.
    • Kesimpulan yang lebih cepat:
    • Operasi integer lebih cepat daripada operasi terapung, yang membawa kepada pelaksanaan model yang lebih cepat.
    • Penggunaan kuasa yang lebih rendah:
    • jalur lebar memori yang dikurangkan dan pengiraan mudah membawa kepada penjimatan tenaga, penting untuk peranti kelebihan dan penggunaan mudah alih.
    • fleksibiliti penyebaran:
    • model yang lebih kecil lebih mudah digunakan pada perkakasan dengan sumber yang terhad (mis., Telefon bimbit, peranti tertanam).
    • degradasi prestasi minimum:
    • Dengan strategi kuantisasi yang betul, model dapat mengekalkan kebanyakan ketepatannya walaupun ketepatan yang dikurangkan.
    • Kesimpulan
    Kuantisasi berat memainkan peranan penting dalam meningkatkan kecekapan model bahasa yang besar, terutamanya apabila ia menyebarkannya pada peranti yang terkawal sumber. Dengan menukar berat ketepatan tinggi ke perwakilan integer ketepatan yang lebih rendah, kita dapat mengurangkan penggunaan memori dengan ketara, meningkatkan kelajuan kesimpulan, dan penggunaan kuasa yang lebih rendah, semuanya tanpa menjejaskan prestasi model.

    Dalam panduan ini, kami meneroka dua teknik kuantisasi yang popular-mengaplikasikan kuantisasi dan kuantisasi sifar-menggunakan GPT-2 sebagai contoh praktikal. Kedua -dua teknik ini menunjukkan keupayaan untuk mengurangkan jejak memori model dan keperluan pengiraan sambil mengekalkan tahap ketepatan yang tinggi dalam tugas penjanaan teks. Walau bagaimanapun, kaedah kuantisasi sifar, dengan pendekatan asimetriknya, secara amnya menghasilkan pemeliharaan ketepatan model yang lebih baik, terutamanya untuk pengagihan berat badan bukan simetri.

    Takeaways Key

    • Kuantisasi Absmax lebih mudah dan berfungsi dengan baik untuk pengagihan berat simetrik, walaupun ia mungkin tidak menangkap pengagihan asimetrik sebagai berkesan sebagai kuantisasi sifar.
    • Kuantisasi Zero-Point menawarkan pendekatan yang lebih fleksibel dengan memperkenalkan offset untuk mengendalikan pengagihan asimetrik, sering membawa kepada ketepatan yang lebih baik dan perwakilan berat yang lebih efisien.
    • kuantisasi adalah penting untuk menggunakan model besar dalam aplikasi masa nyata di mana sumber pengiraan terhad.
    • Walaupun proses kuantisasi mengurangkan ketepatan, ada kemungkinan untuk mengekalkan prestasi model dekat dengan asal dengan strategi penalaan dan kuantisasi yang betul.
    • Teknik visualisasi seperti histogram dapat memberikan gambaran tentang bagaimana kuantisasi mempengaruhi berat model dan pengagihan nilai dalam tensor.

    Soalan Lazim

    Q1. Apakah kuantisasi berat?

    a. Kuantisasi berat mengurangkan ketepatan berat model, biasanya dari nilai-nilai terapung 32-bit kepada integer ketepatan yang lebih rendah (mis., Integer 8-bit), untuk menjimatkan ingatan dan pengiraan sambil mengekalkan prestasi. Bagaimanakah kuantisasi berat mempengaruhi prestasi model?

    a. Walaupun kuantisasi mengurangkan jejak memori model dan masa kesimpulan, ia boleh menyebabkan sedikit kemerosotan dalam ketepatan. Walau bagaimanapun, jika dilakukan dengan betul, kerugian ketepatan adalah minimum.

    Q3. Bolehkah kuantisasi digunakan untuk mana -mana model?

    a. Ya, kuantisasi boleh digunakan untuk mana -mana model rangkaian saraf, termasuk model bahasa, model penglihatan, dan arkitek pembelajaran mendalam yang lain. Q4. Bagaimanakah saya melaksanakan kuantisasi berat dalam model saya?

    a. Anda boleh melaksanakan kuantisasi dengan membuat fungsi untuk skala dan pusingan berat model, kemudian memohon mereka merentasi semua parameter. Perpustakaan seperti Pytorch menyediakan sokongan asli untuk beberapa teknik kuantisasi, walaupun pelaksanaan tersuai, seperti yang ditunjukkan dalam panduan, menawarkan fleksibiliti. Q5. Adakah kuantisasi berfungsi untuk semua jenis model?

    a. Kuantisasi berat adalah paling berkesan untuk model besar di mana mengurangkan jejak memori dan pengiraan adalah kritikal. Walau bagaimanapun, model yang sangat kecil mungkin tidak memberi manfaat daripada kuantisasi.

    Media yang ditunjukkan dalam artikel ini tidak dimiliki oleh Analytics Vidhya dan digunakan pada budi bicara penulis.

Atas ialah kandungan terperinci Kuantisasi Berat Rangkaian Neural. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan