Rumah > Peranti teknologi > AI > teks badan

Tingkatkan prestasi inferens model besar sebanyak 40x menggunakan toolkit

王林
Lepaskan: 2023-11-30 20:26:05
ke hadapan
764 orang telah melayarinya

Intel® Apakah Sambungan untuk Transformer?

Intel® Extension for Transformers[1] ialah kit alat inovatif yang dilancarkan oleh Intel yang boleh berdasarkan Intel® platform seni bina, terutamanya generasi keempat Intel® Xeon® pemproses Sapphi yang boleh diskalakan semula. ], SPR) mempercepatkan dengan ketara Model Bahasa Besar (LLM) berasaskan Transformer. Ciri-ciri utamanya termasuk:

  • Memberikan pengalaman pemampatan model yang lancar dengan memanjangkan API transformer Wajah Memeluk[3] dan memanfaatkan Intel® Pemampat Neural[4]
  • Menyediakan penggunaan kernel pengkuantitian bit rendah ( NeurIPS 2023: Masa jalan inferens LLM yang melaksanakan inferens LLM yang cekap [5] pada CPU menyokong Falcon, LLaMA, MPT, Llama2, BLOOM, OPT, ChatGLM2, GPT-J-6B, Baichuan-13B-Base, Baichuan2-13B-Base , LLM biasa seperti Qwen-7B, Qwen-14B dan Dolly-v2-3B [6]; MiniLM; NeurIPS 2021: Pangkas sekali, lupakan: jarang/pangkas model bahasa pra-latihan).
  • Artikel ini akan menumpukan pada masa jalan inferens LLM
(dirujuk sebagai "masa jalan LLM")

, dan cara menggunakan API berasaskan Transformer untuk melaksanakan LLM yang lebih cekap pada Intel® Xeon® pemproses boleh skala Penaakulan dan cara untuk menangani masalah aplikasi LLM dalam senario sembang. LLM Runtime (LLM Runtime)

LLM Runtime[8] yang disediakan oleh Intel®

Extension for Transformers ialah masa jalan inferens LLM yang ringan tetapi cekap, yang diilhamkan oleh GGML[9] dan serasi dengan llama.cpp[ 10] adalah serasi dan mempunyai ciri-ciri berikut:

Inti telah dioptimumkan untuk pelbagai teknologi pecutan AI terbina dalam
    Intel® Xeon®
  • CPU (seperti AMX, VNNI) dan set arahan AVX512F dan AVX2 Menyediakan lebih banyak pilihan kuantifikasi, seperti: butiran yang berbeza (mengikut saluran atau kumpulan), saiz kumpulan yang berbeza (seperti: 32/128); inferens dalam sistem berbilang saluran.
  • Rajah seni bina ringkas LLM Runtime adalah seperti berikut:
  • Kandungan yang perlu ditulis semula ialah: △Rajah 1. Gambar rajah seni bina ringkas LLM Runtime of Intel® Extension for Transformer-Using
  • API, dilaksanakan pada Inferens Cekap LLM CPU

Dengan kurang daripada 9 baris kod, anda boleh mencapai prestasi inferens LLM yang lebih baik pada CPU. Pengguna boleh mendayakan API seperti Transformer dengan mudah untuk pengiraan dan inferens. Hanya tetapkan 'load_in_4bit' kepada benar dan import model daripada URL HuggingFace atau laluan setempat. Contoh kod untuk mendayakan kuantiti INT4 berat sahaja disediakan di bawah:

from transformers import AutoTokenizer, TextStreamerfrom intel_extension_for_transformers.transformers import AutoModelForCausalLMmodel_name = "Intel/neural-chat-7b-v3-1” prompt = "Once upon a time, there existed a little girl,"tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)inputs = tokenizer(prompt, return_tensors="pt").input_idsstreamer = TextStreamer(tokenizer)model = AutoModelForCausalLM.from_pretrained(model_name, load_in_4bit=True)outputs = model.generate(inputs, streamer=streamer, max_new_tokens=300)
Salin selepas log masuk

Tetapan lalai ialah: simpan pemberat sebagai 4 bit, lakukan pengiraan sebagai 8 bit. Tetapi ia juga menyokong gabungan jenis data pengiraan (dtype) dan jenis data berat yang berbeza, dan pengguna boleh mengubah suai tetapan mengikut keperluan. Contoh kod untuk cara menggunakan ciri ini disediakan di bawah: Tingkatkan prestasi inferens model besar sebanyak 40x menggunakan toolkit

from transformers import AutoTokenizer, TextStreamerfrom intel_extension_for_transformers.transformers import AutoModelForCausalLM, WeightOnlyQuantConfigmodel_name = "Intel/neural-chat-7b-v3-1” prompt = "Once upon a time, there existed a little girl,"woq_config = WeightOnlyQuantConfig(compute_dtype="int8", weight_dtype="int4")tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)inputs = tokenizer(prompt, return_tensors="pt").input_idsstreamer = TextStreamer(tokenizer)model = AutoModelForCausalLM.from_pretrained(model_name,quantization_cnotallow=woq_config)outputs = model.generate(inputs, streamer=streamer, max_new_tokens=300)
Salin selepas log masuk
Ujian Prestasi

Selepas usaha berterusan, prestasi INT4 bagi skim pengoptimuman di atas telah dipertingkatkan dengan ketara. Artikel ini melakukan perbandingan prestasi dengan llama.cpp pada sistem yang dilengkapi dengan

Intel® GB (16 x 16 GB DDR5 4800 MT/s [4800 MT/s]), BIOS 3A14.TEL2P1, mikrokod 0x2b0001b0, CentOS Stream 8.

Keputusan ujian prestasi inferens ditunjukkan dalam jadual di bawah, di mana saiz input ialah 32, saiz output ialah 32, dan rasuk ialah 1

△Jadual 1. Perbandingan prestasi inferens antara LLM Runtime dan llama.cpp (saiz input=32, Saiz output = 32, rasuk = 1)

Hasil ujian prestasi inferens apabila saiz input ialah 1024, saiz output ialah 32, dan rasuk ialah 1, lihat jadual berikut untuk butiran:

Tingkatkan prestasi inferens model besar sebanyak 40x menggunakan toolkit
△Jadual 2. Perbandingan Masa Jalan LLM dengan prestasi inferens llama.cpp (saiz input=1024, saiz output=32, rasuk=1)

Mengikut Jadual 2 di atas: Berbanding dengan llama.cpp yang juga berjalan pada pemproses Intel® Xeon® Scalable generasi keempat, sama ada token pertama atau token seterusnya, LLM Runtime boleh mengurangkan kelewatan dengan ketara dan kelajuan inferens yang pertama. token dan token seterusnya dinaikkan masing-masing sehingga 40 kali [a] (Baichuan-13B, input ialah 1024) dan 2.68 kali [b] (MPT-7B, input ialah 1024 ). Ujian llama.cpp menggunakan asas kod lalai [10]. Berdasarkan keputusan ujian dalam Jadual 1 dan Jadual 2, dapat disimpulkan bahawa berbanding dengan llama.cpp juga berjalan pada generasi keempat

Intel® Xeon®

Pemproses boleh skala, LLM Runtime boleh meningkatkan dengan ketara banyak prestasi biasa keseluruhan LLM: apabila saiz input ialah 1024, peningkatan sebanyak 3.58 hingga 21.5 kali dicapai; apabila saiz input ialah 32, peningkatan sebanyak 1.76 hingga 3.43 kali dicapai[c]. Ujian Ketepatan

Intel®

Pelanjutan untuk Transformers boleh memanfaatkan kaedah pengkuantitian seperti SignRound[11], RTN dan GPTQ[12] dalam Intel® Neural Compressor dan menggunakan lambadaferllaswagigrande, set data piqaference dan INT yang disahkan. ketepatan. Jadual di bawah membandingkan purata keputusan ujian dengan ketepatan FP32.

Tingkatkan prestasi inferens model besar sebanyak 40x menggunakan toolkit△Jadual 3. Perbandingan ketepatan antara INT4 dan FP32
Seperti yang dapat dilihat daripada Jadual 3 di atas, kehilangan ketepatan inferens INT4 yang dilakukan oleh berbilang model berdasarkan LLM Runtime adalah sangat kecil dan hampir boleh diabaikan. Kami mengesahkan banyak model, tetapi hanya beberapa yang disenaraikan di sini kerana had ruang. Jika anda ingin maklumat lanjut atau butiran, sila lawati pautan ini:
https://medium.com/@NeuralCompressor/llm-performance-of-intel-extension-for-transformers-f7d061556176

. Fungsi yang lebih maju: Memenuhi keperluan aplikasi LLM dalam lebih banyak senario

Pada masa yang sama, LLM Runtime[8] juga mempunyai fungsi selari tensor CPU dwi-saluran, yang merupakan salah satu produk terawal dengan fungsi sedemikian. Pada masa hadapan, dwi nod akan disokong lagi.

Walau bagaimanapun, kelebihan LLM Runtime bukan sahaja prestasi dan ketepatannya yang lebih baik, kami juga telah melaburkan banyak usaha untuk meningkatkan fungsinya dalam senario aplikasi sembang dan menyelesaikan aplikasi berikut yang mungkin dihadapi oleh LLM dalam senario sembang Dilema:

Dialog bukan sahaja tentang penaakulan LLM, sejarah dialog juga berguna.
  1. Panjang keluaran terhad: Pra-latihan model LLM terutamanya berdasarkan panjang jujukan terhad. Oleh itu, ketepatannya berkurangan apabila panjang jujukan melebihi saiz tetingkap perhatian yang digunakan semasa pra-latihan.
  2. Ketidakcekapan: Semasa peringkat penyahkodan, LLM berasaskan Transformer akan menyimpan status nilai kunci (KV) semua token yang dijana sebelum ini, mengakibatkan penggunaan memori yang berlebihan dan peningkatan kependaman penyahkodan.
  3. Berkenaan isu pertama, ciri dialog LLM Runtime diselesaikan dengan menggabungkan lebih banyak data sejarah dialog dan menjana lebih banyak output, yang llama.cpp belum lagi dilengkapi dengan baik untuk dikendalikan.

Mengenai soalan kedua dan ketiga, kami menyepadukan penstriman LLM (Steaming LLM) ke dalam

Intel®

Extension for Transformers, yang boleh mengoptimumkan penggunaan memori dengan ketara dan mengurangkan kependaman inferens. Streaming LLM

Berbeza daripada algoritma cache KV tradisional, kaedah kami menggabungkan

Attention Sink (4 token awal)

untuk meningkatkan kestabilan pengiraan perhatian dan mengekalkan yang terkini dengan bantuan rolling token cache KV, iaitu penting untuk pemodelan bahasa. Reka bentuk ini sangat fleksibel dan boleh disepadukan dengan lancar ke dalam model bahasa autoregresif yang mampu menggunakan pengekodan kedudukan putaran RoPE dan pengekodan kedudukan relatif ALiBi.

Tingkatkan prestasi inferens model besar sebanyak 40x menggunakan toolkitKandungan yang perlu ditulis semula ialah: △ Rajah 2. KV cache Steam LLM menggunakan attention sinking untuk melaksanakan model bahasa penstriman yang cekap (sumber imej: [13])

Selain itu, ia berbeza daripada llama. cpp , pelan pengoptimuman ini turut menambah parameter baharu seperti "n_keep" dan "n_discard" untuk meningkatkan strategi LLM Penstriman. Pengguna boleh menggunakan parameter "n_keep" untuk menentukan bilangan token untuk disimpan dalam cache KV, dan parameter "n_discard" untuk menentukan nombor untuk dibuang antara token yang dijana. Untuk mengimbangi prestasi dan ketepatan yang lebih baik, sistem membuang separuh daripada nombor token terkini dalam cache KV secara lalai

Pada masa yang sama, untuk meningkatkan lagi prestasi, kami juga telah menambahkan LLM Penstriman kepada mod gabungan MHA. Jika model menggunakan pengekodan kedudukan putaran (RoPE) untuk melaksanakan pembenaman kedudukan, maka anda hanya perlu menggunakan "operasi anjakan" pada K-Cache sedia ada untuk mengelak daripada menjalankan operasi pada token yang dijana sebelum ini yang belum dibuang. Kaedah ini bukan sahaja memanfaatkan sepenuhnya saiz konteks penuh apabila menjana teks panjang, tetapi juga tidak menanggung overhed tambahan sehingga konteks cache KV diisi sepenuhnya.

“shift operation”依赖于旋转的交换性和关联性,或复数乘法。例如:如果某个token的K-张量初始放置位置为m并且旋转了θfor i ∈ [0,d/2),那么当它需要移动到m-1这个位置时,则可以旋转回到(-1)×θfor i ∈ [0,d/2)。这正是每次舍弃n_discard个token的缓存时发生的事情,而此时剩余的每个token都需要“移动”n_discard个位置。下图以“n_keep=4、n_ctx=16、n_discard=1”为例,展示了这一过程。

Tingkatkan prestasi inferens model besar sebanyak 40x menggunakan toolkit

△图3.Ring-Buffer KV-Cache和Shift-RoPE工作原理

需要注意的是:融合注意力层无需了解上述过程。如果对K-cache和V-cache进行相同的洗牌,注意力层会输出几乎相同的结果(可能存在因浮点误差导致的微小差异)

您可以使用下面的代码来启动Streaming LLM:

from transformers import AutoTokenizer, TextStreamer from intel_extension_for_transformers.transformers import AutoModelForCausalLM, WeightOnlyQuantConfig model_name = "Intel/neural-chat-7b-v1-1" # Hugging Face model_id or local model woq_config = WeightOnlyQuantConfig(compute_dtype="int8", weight_dtype="int4") prompt = "Once upon a time, a little girl"tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) inputs = tokenizer(prompt, return_tensors="pt").input_ids streamer = TextStreamer(tokenizer)model = AutoModelForCausalLM.from_pretrained(model_name, quantization_cnotallow=woq_config, trust_remote_code=True) # Recommend n_keep=4 to do attention sinks (four initial tokens) and n_discard=-1 to drop half rencetly tokens when meet length threshold outputs = model.generate(inputs, streamer=streamer, max_new_tokens=300, ctx_size=100, n_keep=4, n_discard=-1)
Salin selepas log masuk

结论与展望

本文基于上述实践经验,提供了一个在英特尔® 至强® 可扩展处理器上实现高效的低位(INT4)LLM推理的解决方案,并且在一系列常见LLM上验证了其通用性以及展现了其相对于其他基于CPU的开源解决方案的性能优势。未来,我们还将进一步提升CPU张量库和跨节点并行性能。

欢迎您试用英特尔® Extension for Transformers[1],并在英特尔® 平台上更高效地运行LLM推理!也欢迎您向代码仓库(repository)提交修改请求 (pull request)、问题或疑问。期待您的反馈!

特别致谢

在此致谢为此篇文章做出贡献的英特尔公司人工智能资深经理张瀚文及工程师许震中、余振滔、刘振卫、丁艺、王哲、刘宇澄。

[a]根据表2 Baichuan-13B的首个token测试结果计算而得。
[b]根据表2 MPT-7B的下一个token测试结果计算而得。
[c]当输入大小为1024时,整体性能=首个token性能+1023下一个token性能;当输入大小为32时,整体性能=首个token性能+31下一个token性能。

Atas ialah kandungan terperinci Tingkatkan prestasi inferens model besar sebanyak 40x menggunakan toolkit. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:51cto.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan