TRLX เป็นกรอบการฝึกอบรมแบบกระจายที่ออกแบบมาจากพื้นดินเพื่อมุ่งเน้นไปที่แบบจำลองภาษาขนาดใหญ่ที่ปรับแต่งด้วยการเรียนรู้การเสริมแรงโดยใช้ฟังก์ชั่นรางวัลที่ได้รับหรือชุดข้อมูลที่มีป้ายกำกับ
การสนับสนุนการฝึกอบรมสำหรับ? Hugging Face Models จัดทำโดยผู้ฝึกสอนที่ได้รับการสนับสนุนช่วยให้ผู้ใช้สามารถปรับแต่งแบบจำลองเชิงสาเหตุและแบบใช้ภาษา T5 ได้สูงถึง 20B พารามิเตอร์เช่น facebook/opt-6.7b , EleutherAI/gpt-neox-20b และ google/flan-t5-xxl สำหรับโมเดลที่มีพารามิเตอร์ 20b TRLX ให้ผู้ฝึกสอน Nvidia NEMO ที่ได้รับการสนับสนุนซึ่งใช้ประโยชน์จากเทคนิคการขนานที่มีประสิทธิภาพเพื่อปรับขนาดได้อย่างมีประสิทธิภาพ
ขณะนี้มีการใช้อัลกอริทึม RL ต่อไปนี้:
| อัลกอริทึม | เร่งรัดเทรนเนอร์ | Nemo Trainer |
|---|---|---|
| การเพิ่มประสิทธิภาพนโยบายใกล้เคียง (PPO) | ||
| ภาษาโดยนัย Q-Learning (ILQL) |
เอกสาร
- ชีส รวบรวมคำอธิบายประกอบของมนุษย์สำหรับแอปพลิเคชัน RL ของคุณด้วยห้องสมุดการรวบรวมข้อมูลมนุษย์ในวงของเรา
git clone https://github.com/CarperAI/trlx.git
cd trlx
pip install torch --extra-index-url https://download.pytorch.org/whl/cu118
pip install -e . สำหรับการใช้งานเพิ่มเติมดูตัวอย่าง นอกจากนี้คุณยังสามารถลองสมุดบันทึก colab ด้านล่าง:
| คำอธิบาย | การเชื่อมโยง |
|---|---|
| Simulacra (GPT2, ILQL) | |
| ความเชื่อมั่น (GPT2, ILQL) |
ตัวอย่างล่าสุดอยู่ที่น้ำหนักและอคติของเรา
คุณสามารถฝึกอบรมแบบจำลองโดยใช้ฟังก์ชั่นรางวัลหรือชุดข้อมูลที่มีป้ายกำกับ
trainer = trlx . train ( 'gpt2' , reward_fn = lambda samples , ** kwargs : [ sample . count ( 'cats' ) for sample in samples ])สำหรับการฝึกอบรม แบบจำลองรางวัล อ้างอิงถึงห้องสมุดเผด็จการของเรา
trainer = trlx . train ( 'EleutherAI/gpt-j-6B' , samples = [ 'dolphins' , 'geese' ], rewards = [ 1.0 , 100.0 ]) trainer = trlx . train ( 'gpt2' , samples = [[ 'Question: 1 + 2 Answer:' , '3' ], [ 'Question: Solve this equation: ∀n>0, s=2, sum(n ** -s). Answer:' , '(pi ** 2)/ 6' ]]) trainer . generate ( ** tokenizer ( 'Q: Who rules the world? A:' , return_tensors = 'pt' ), do_sample = True ) from trlx . data . default_configs import default_ppo_config
config = default_ppo_config ()
config . model . model_path = 'EleutherAI/gpt-neox-20b'
config . tokenizer . tokenizer_path = 'EleutherAI/gpt-neox-20b'
config . train . seq_length = 2048
trainer = trlx . train ( config = config , reward_fn = lambda samples , ** kwargs : [ len ( sample ) for sample in samples ])เพื่อลดการใช้หน่วยความจำ (หากคุณประสบกับข้อผิดพลาดของหน่วยความจำ) ก่อนอื่นลองการตั้งค่าต่ำสุดสำหรับ hyperparameters ต่อไปนี้และในที่สุดก็เพิ่มขึ้น:
# micro batch size per gpu
config . train . batch_size = 1
# freeze all transformer layers
config . model . num_layers_unfrozen = 0
# maximum sample length, prompts or samples longer than that will be truncated
config . train . seq_length = 128
# micro batch size for sampling (specific for PPO)
config . method . chunk_size = 1
# use an additional Q-head (specific for ILQL)
config . method . two_qs = False trainer . save_pretrained ( '/path/to/output/folder/' )accelerate config # choose DeepSpeed option
accelerate launch examples/simulacra.pyทำตามคำแนะนำการตั้งค่าใน NEMO ReadMe
python examples/nemo_ilql_sentiments.pyสำหรับการใช้งานเพิ่มเติมโปรดดูที่ Nemo Readme
ray start --head --port=6379
python -m trlx.sweep --config configs/sweeps/ppo_sweep.yml --accelerate_config configs/accelerate/ddp.yaml --num_gpus 4 examples/ppo_sentiments.pymain ของ TRLX python -m trlx.reference octocat/trlx-fork:fix-branch TRLX ใช้ไลบรารี logging Python มาตรฐานเพื่อบันทึกข้อมูลการฝึกอบรมไปยังคอนโซล เครื่องบันทึกเริ่มต้นถูกตั้งค่าเป็นระดับ INFO ซึ่งหมายความว่า INFO WARNING ERROR และข้อความระดับ CRITICAL จะถูกพิมพ์ไปยังเอาต์พุตมาตรฐาน
ในการเปลี่ยนระดับบันทึกโดยตรงคุณสามารถใช้ Setter Verbosity ตัวอย่างเช่นในการตั้งค่าระดับบันทึกเป็น WARNING การใช้งาน:
import trlx
trlx . logging . set_verbosity ( trlx . logging . WARNING ) สิ่งนี้จะระงับข้อความระดับ INFO แต่ยังคงพิมพ์ WARNING ERROR และข้อความระดับ CRITICAL
นอกจากนี้คุณยังสามารถควบคุมการบันทึกคำฟุ่มเฟือยได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม TRLX_VERBOSITY เป็นหนึ่งในชื่อระดับการบันทึกมาตรฐาน:
CRITICAL ( trlx.logging.CRITICAL )ERROR ( trlx.logging.ERROR )WARNING ( trlx.logging.WARNING )INFO ( trlx.logging.INFO )DEBUG ( trlx.logging.DEBUG ) export TRLX_VERBOSITY=WARNING โดยค่าเริ่มต้นแถบความคืบหน้า tqdm จะใช้เพื่อแสดงความคืบหน้าการฝึกอบรม คุณสามารถปิดการใช้งานได้โดยเรียก trlx.logging.disable_progress_bar() มิฉะนั้น trlx.logging.enable_progress_bar() เพื่อเปิดใช้งาน
ข้อความสามารถจัดรูปแบบด้วยรายละเอียดมากขึ้นโดยการตั้งค่า trlx.logging.enable_explicit_format() สิ่งนี้จะฉีดข้อมูลไซต์โทรลงในแต่ละบันทึกซึ่งอาจเป็นประโยชน์สำหรับการดีบัก
[2023-01-01 05:00:00,000] [INFO] [ppo_orchestrator.py:63:make_experience] [RANK 0] Message...เคล็ดลับ: เพื่อลดจำนวนเอาต์พุตการบันทึกคุณอาจพบว่ามีประโยชน์ในการเปลี่ยนระดับบันทึกของไลบรารีของบุคคลที่สามที่ใช้โดย TRLX ตัวอย่างเช่นลองเพิ่ม
transformers.logging.set_verbosity_error()ไปที่ด้านบนของสคริปต์ TRLX ของคุณเพื่อปิดข้อความ verbose จากไลบรารีtransformers(ดูเอกสารการบันทึกสำหรับรายละเอียดเพิ่มเติม)
สำหรับการพัฒนาตรวจสอบแนวทางเหล่านี้และอ่านเอกสารของเรา
@inproceedings{havrilla-etal-2023-trlx,
title = "trl{X}: A Framework for Large Scale Reinforcement Learning from Human Feedback",
author = "Havrilla, Alexander and
Zhuravinskyi, Maksym and
Phung, Duy and
Tiwari, Aman and
Tow, Jonathan and
Biderman, Stella and
Anthony, Quentin and
Castricato, Louis",
booktitle = "Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing",
month = dec,
year = "2023",
address = "Singapore",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2023.emnlp-main.530",
doi = "10.18653/v1/2023.emnlp-main.530",
pages = "8578--8595",
}
ขอบคุณมากสำหรับ Leandro von Werra ที่ให้การสนับสนุน TRL ซึ่งเป็นห้องสมุดที่เป็นแรงบันดาลใจให้กับ repo นี้