บันทึกประจำรุ่น
การแนะนำ
รองรับเมทริกซ์
ผลงาน
การฝึกอบรมการเร่งความเร็วของหม้อแปลงไฟฟ้า
การเร่งความเร็วของการฝึกอบรม BERT
การเร่งความเร็วของการอนุมานหม้อแปลง
การเร่งความเร็วของการอนุมานของ BERT
การติดตั้ง
ติดตั้งจาก PyPI
สร้างจากแหล่งที่มา
เริ่มต้นใช้งาน
การฝึกอบรม LightSeq ตั้งแต่เริ่มต้น
การฝึกอบรม LightSeq จาก Fairseq
การฝึกอบรม LightSeq จาก Hugging Face BERT
การอนุมาน LightSeq จาก Fairseq
การอนุมาน LightSeq จาก Hugging Face BERT
การปรับใช้ LightSeq โดยใช้เซิร์ฟเวอร์การอนุมาน
อ้างอิงถึงเรา
เรากำลังรับสมัครงาน!
[2022.10.25] เปิดตัวเวอร์ชัน v3.0.0 ซึ่งรองรับการฝึกอบรมและการอนุมานแบบผสมความแม่นยำ int8 [中文介绍]
[2021.06.18] เปิดตัวเวอร์ชัน v2.0.0 ซึ่งรองรับ fp16 Mixed-Precision Training [中文介绍]
[2019.12.06] เปิดตัวเวอร์ชัน v1.0.0 ซึ่งรองรับการอนุมานแบบผสมความแม่นยำ fp16 [中文介绍]
LightSeq คือไลบรารีการฝึกอบรมและการอนุมานประสิทธิภาพสูงสำหรับการประมวลผลลำดับและการสร้างที่นำไปใช้ใน CUDA ช่วยให้สามารถคำนวณโมเดล NLP และ CV สมัยใหม่ เช่น BERT, GPT, Transformer ฯลฯ ได้อย่างมีประสิทธิภาพสูง ดังนั้นจึงมีประโยชน์สูงสุดสำหรับการแปลด้วยเครื่อง การสร้างข้อความ การจัดหมวดหมู่รูปภาพ และงานอื่นๆ ที่เกี่ยวข้องกับลำดับ
ไลบรารีนี้สร้างขึ้นจากไลบรารีอย่างเป็นทางการของ CUDA (cuBLAS, Thrust, CUB) และฟังก์ชันเคอร์เนลแบบกำหนดเอง ซึ่งรวมเข้าด้วยกันเป็นพิเศษและปรับให้เหมาะสมสำหรับตระกูลโมเดล Transformer นอกเหนือจากส่วนประกอบของโมเดลแล้ว ไลบรารีการอนุมานยังมอบการจัดการโมเดลที่ปรับใช้ได้ง่ายและให้บริการแบ็กเอนด์บน TensorRT Inference Server ด้วย LightSeq เราสามารถพัฒนาสถาปัตยกรรม Transformer ที่ได้รับการดัดแปลงได้อย่างง่ายดายโดยใช้โค้ดเพิ่มเติมเพียงเล็กน้อย
การฝึกอบรมและการอนุมาน LightSeq ทำได้รวดเร็วมาก ด้านล่างนี้คือประสิทธิภาพโดยรวม:
การฝึก LightSeq fp16 มีความเร็วเพิ่มขึ้นถึง 3 เท่า เมื่อเทียบกับการฝึก PyTorch fp16
การฝึกอบรม LightSeq int8 มีความเร็วเพิ่มขึ้นถึง 5 เท่า เมื่อเทียบกับ PyTorch QAT (เช่น การฝึกอบรมที่ตระหนักถึงการวัดปริมาณ)
การอนุมาน LightSeq fp16 และ int8 มีความเร็วเพิ่มขึ้นสูงสุด 12x และ 15x เมื่อเทียบกับการอนุมาน PyTorch fp16 ตามลำดับ
LightSeq รองรับคุณสมบัติหลายอย่าง ซึ่งแสดงในตารางด้านล่าง
คุณสมบัติ | รายการสนับสนุน |
---|---|
แบบอย่าง | หม้อแปลงไฟฟ้า, BERT, BART, GPT2, ViT, T5, MT5, XGLM, VAE, หลายภาษา, MoE |
ชั้น | การฝัง, ตัวเข้ารหัส, ตัวถอดรหัส, เกณฑ์, เครื่องมือเพิ่มประสิทธิภาพ |
ความแม่นยำ | fp32, fp16, int8 |
โหมด | การฝึกอบรม การอนุมาน |
ความเข้ากันได้ | Fairseq, กอดใบหน้า, DeepSpeed |
อัลกอริทึมการถอดรหัส | การค้นหาลำแสง, การค้นหาลำแสงที่หลากหลาย, การสุ่มตัวอย่าง, CRF |
คนอื่น | การหาปริมาณการสื่อสารแบบไล่ระดับ, อัลกอริทึม GEMM ปรับแต่งอัตโนมัติ |
ตารางด้านล่างแสดงโหมดการทำงานและความแม่นยำที่รุ่นต่างๆ รองรับในปัจจุบัน
โมเดล | การฝึกอบรม fp16 | การอนุมาน fp16 | การฝึกอบรม int8 | การอนุมาน int8 |
---|---|---|---|---|
หม้อแปลงไฟฟ้า | ใช่ | ใช่ | ใช่ | ใช่ |
เบิร์ต | ใช่ | ใช่ | ใช่ | ใช่ |
GPT2 | ใช่ | ใช่ | ใช่ | ใช่ |
บาร์ต | ใช่ | ใช่ | - | - |
T5 | - | ใช่ | - | - |
MT5 | - | ใช่ | - | - |
XGLM | - | ใช่ | - | - |
ไวที | ใช่ | ใช่ | ใช่ | ใช่ |
วีเออี | - | ใช่ | - | - |
พูดได้หลายภาษา | - | ใช่ | - | ใช่ |
โมอี | - | ใช่ | - | - |
เราทดสอบการเร่งความเร็วของการฝึกอบรมและการอนุมาน LightSeq โดยใช้ความแม่นยำผสมทั้ง fp16 และ int8 ในรุ่น Transformer และ BERT ค่าพื้นฐานคือ PyTorch fp16 mix-precision การทดลองฝึกได้รับการทดสอบบน A100 GPU หนึ่งตัว และการทดสอบอนุมานได้รับการทดสอบบน A100 GPU แปดตัว
ดูผลลัพธ์ประสิทธิภาพเพิ่มเติมได้ที่นี่
ขนาดโทเค็นแบทช์ | PyTorch QAT | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
512 | 0.36 | 1.99 | 1.86 |
1,024 | 0.37 | 1.78 | 1.69 |
2048 | 0.37 | 1.56 | 1.50 |
4096 | 0.39 | 1.47 | 1.44 |
8192 | 0.41 | 1.44 | 1.44 |
15,000 | 0.43 | 1.44 | 1.44 |
ขนาดโทเค็นแบทช์ | PyTorch QAT | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
8 | 0.45 | 2.12 | 1.99 |
16 | 0.44 | 1.92 | 1.80 |
32 | 0.42 | 1.59 | 1.52 |
64 | 0.46 | 1.62 | 1.58 |
128 | 0.46 | 1.74 | 1.70 |
256 | 0.46 | 1.68 | 1.73 |
ขนาดแบทช์ | ความยาวลำดับ | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
1 | 8 | 8.00 น | 9.33 |
1 | 32 | 6.48 | 7.38 |
1 | 128 | 6.24 | 6.19 |
8 | 8 | 9.38 | 10.71 |
8 | 32 | 8.24 | 8.75 |
8 | 128 | 6.83 | 7.28 |
32 | 8 | 11.82 | 14.44 |
32 | 32 | 9.68 | 11.15 |
32 | 128 | 6.68 | 7.74 |
ขนาดแบทช์ | ความยาวลำดับ | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
1 | 8 | 9.22 | 9.87 |
1 | 32 | 10.51 | 11.30 น |
1 | 128 | 9.96 | 10.85 |
8 | 8 | 9.88 | 10.33 |
8 | 32 | 7.79 | 8.22 |
8 | 128 | 4.04 | 4.35 |
32 | 8 | 10.60 | 11.02 |
32 | 32 | 8.11 | 8.85 |
32 | 128 | 1.82 | 2.04 |
คุณสามารถติดตั้ง LightSeq ได้จาก PyPI ซึ่งรองรับเฉพาะ Python 3.6 ถึง 3.8 บน Linux:
pip ติดตั้ง lightseq.php
คุณสามารถสร้างจากแหล่งที่มาได้:
PATH=/usr/local/hdf5/:$PATH ENABLE_FP32=0 ENABLE_DEBUG=0 ติดตั้ง pip -e $PROJECT_DIR
สามารถดูการแนะนำอาคารโดยละเอียดได้ที่นี่
เรามีตัวอย่างหลายตัวอย่างที่นี่เพื่อแสดงการใช้งาน LightSeq โปรดดูคู่มือผู้ใช้ฉบับสมบูรณ์และตัวอย่างสำหรับรายละเอียดเพิ่มเติม
คุณสามารถใช้โมดูลที่ LightSeq มอบให้เพื่อสร้างโมเดลของคุณเองได้ ต่อไปนี้เป็นตัวอย่างของการสร้างเลเยอร์ตัวเข้ารหัส Transformer
ขั้นแรก นำเข้าโมดูลตัวเข้ารหัส LightSeq Transformer:
จาก lightseq.training นำเข้า LSTransformerEncoderLayer
จากนั้นสร้างการกำหนดค่าตัวเข้ารหัส และสร้างเลเยอร์ตัวเข้ารหัส LightSeq Transformer ที่เริ่มต้นด้วยการกำหนดค่า:
กำหนดค่า = LSTransformerEncoderLayer.get_config(max_batch_tokens=4096,max_seq_len=512,hidden_size=1024,intermediate_size=4096,nhead=16,attn_prob_d ropout_ratio=0.1,activation_dropout_ratio=0.1,hidden_dropout_ratio=0.1,pre_layer_norm=True,activation_fn="relu",fp16=True,local_rank=0, )layer = LSTransformerEncoderLayer(กำหนดค่า)
นอกเหนือจากเลเยอร์ตัวเข้ารหัสแล้ว โมดูลอื่นๆ ยังสามารถสร้างโดยใช้วิธีการที่คล้ายกัน จากนั้นจึงฝึกเป็นโมเดล PyTorch ปกติได้
มีการใช้งานเพิ่มเติมที่นี่
LightSeq รวมโมดูลที่รวดเร็วและฟ้าผ่าทั้งหมดเข้ากับ Fairseq
ขั้นแรกให้ติดตั้งข้อกำหนดสองข้อต่อไปนี้:
pip ติดตั้ง fairseq==0.10.2 sacremoses
คุณสามารถฝึกงานการแปลแบบผสมความแม่นยำ fp16 บนชุดข้อมูล wmt14 en2de ได้โดย:
ตัวอย่าง sh/การฝึกอบรม/fairseq/ls_fairseq_wmt14en2de.sh
(ทางเลือก) จากนั้น คุณสามารถเริ่มการฝึกอบรมแบบผสมความแม่นยำ int8 บนพื้นฐานของโมเดลการฝึกอบรมล่วงหน้า fp16 โดย:
sh ตัวอย่าง/การฝึกอบรม/fairseq/ls_fairseq_quant_wmt14en2de.sh
มีการใช้งานเพิ่มเติมที่นี่
LightSeq แทนที่เลเยอร์ตัวเข้ารหัสของ Hugging Face BERT ด้วยเลเยอร์ที่รวดเร็วของ LightSeq
ขั้นแรก คุณควรติดตั้งข้อกำหนดเหล่านี้:
pip ติดตั้งชุดข้อมูลลำดับของ Transformers
ก่อนที่จะทำการฝึกครั้งต่อไป คุณต้องสลับไปที่ไดเร็กทอรีต่อไปนี้:
cd examples/training/huggingface/bert
จากนั้นคุณสามารถปรับแต่ง BERT สำหรับงานต่างๆ ได้อย่างง่ายดาย ยกตัวอย่างงานการรับรู้เอนทิตีที่มีชื่อ คุณสามารถฝึก BERT ด้วยความแม่นยำผสม fp16 โดยใช้:
หลาม task_ner/run_ner.sh
(ทางเลือก) คุณยังสามารถเริ่มการฝึกอบรม int8 mix-precision บนพื้นฐานของโมเดลการฝึกอบรมล่วงหน้า fp16 โดย:
หลาม task_ner/run_quant_ner.sh
มีการใช้งานเพิ่มเติมที่นี่
หลังจากการฝึกฝนโดยใช้สคริปต์ข้างต้น คุณสามารถอนุมานโมเดลได้อย่างรวดเร็วโดยใช้ LightSeq
คุณควรแปลงน้ำหนัก fp16 PyTorch เป็น LightSeq protobuf หรือ HDF5:
หลามส่งออก/fairseq/ls_fs_transformer_export.py
(ไม่บังคับ) คุณยังสามารถแปลงน้ำหนัก int8 PyTorch เป็น LightSeq protobuf หรือ HDF5 ได้:
หลามส่งออก/fairseq/ls_fs_quant_transformer_export.py
เมื่อได้รับตุ้มน้ำหนัก LightSeq แล้ว คุณสามารถอนุมานได้อย่างรวดเร็วโดยใช้โค้ดต่อไปนี้:
นำเข้า lightseq.inference เป็น lsimodel = lsi.Transformer(MODEL_PATH, MAX_BATCH_SIZE)results = model.infer([[63, 47, 65, 1507, 88, 74, 10, 2057, 362, 9, 284, 6, 2, 1 ]])
โดยที่ MODEL_PATH คือเส้นทางของน้ำหนัก LightSeq ของคุณ และ MAX_BATCH_SIZE คือขนาดแบตช์สูงสุดของประโยคที่คุณป้อน
คุณยังสามารถอนุมานน้ำหนัก int8 LightSeq ได้อย่างรวดเร็วด้วยการแทนที่ lsi.Transformer
ด้วย lsi.QuantTransformer
มีการใช้งานเพิ่มเติมที่นี่
เราให้ตัวอย่าง bert-base end2end เพื่อดูว่า Lightseq เร็วแค่ไหนเมื่อเปรียบเทียบกับ Hugging Face ดั้งเดิม
ขั้นแรก คุณควรติดตั้งข้อกำหนดและค้นหาไปยังไดเร็กทอรีที่ระบุ:
pip ติดตั้งตัวอย่าง Transformerscd/การอนุมาน/python.php
จากนั้นคุณสามารถตรวจสอบประสิทธิภาพได้โดยการรันคำสั่งต่อไปนี้ hf_bert_export.py
ใช้เพื่อแปลงน้ำหนัก PyTorch เป็น LightSeq protobuf หรือ HDF5
หลามส่งออก/huggingface/hf_bert_export.py การทดสอบหลาม /ls_bert.py
มีการใช้งานเพิ่มเติมที่นี่
เราจัดเตรียมอิมเมจนักเทียบท่าซึ่งประกอบด้วย tritonserver และไลบรารีลิงก์ไดนามิกของ LightSeq และคุณสามารถปรับใช้เซิร์ฟเวอร์การอนุมานได้โดยเพียงแค่แทนที่ไฟล์โมเดลด้วยไฟล์โมเดลของคุณเอง
sudo docker ดึง hexisyztem / tritonserver_lightseq:22.01-1
มีการใช้งานเพิ่มเติมที่นี่
หากคุณใช้ LightSeq ในการวิจัยของคุณ โปรดอ้างอิงเอกสารต่อไปนี้
@InProceedings{wang2021lightseq, title = "{L}ight{S}eq: A High Performance Inference Library for Transformers", author = "Wang, Xiaohui and Xiong, Ying and Wei, Yang and Wang, Mingxuan and Li, Lei", booktitle = "Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies: Industry Papers (NAACL-HLT)", month = jun, year = "2021", publisher = "Association for Computational Linguistics", pages = "113--120", } @article{wang2021lightseq2, title={LightSeq2: Accelerated Training for Transformer-based Models on GPUs}, author={Wang, Xiaohui and Xiong, Ying and Qian, Xian and Wei, Yang and Li, Lei and Wang, Mingxuan}, journal={arXiv preprint arXiv:2110.05722}, year={2021} }
ทีม LightSeq กำลังจ้างนักศึกษาฝึกงานและ FTE ที่มีพื้นฐานในด้าน ระบบการเรียนรู้เชิงลึก การประมวลผลภาษาธรรมชาติ คอมพิวเตอร์วิทัศน์ คำพูด ฯลฯ เราอยู่ในปักกิ่งและเซี่ยงไฮ้ หากคุณสนใจ กรุณาส่งเรซูเม่ของคุณมาที่ [email protected]