เป้าหมายของ repo นี้คือการใช้งานแบบจำลอง GPT อย่างง่าย ๆ ที่สามารถใช้สำหรับแอพพลิเคชั่นการผลิต รหัสปัจจุบันรองรับกรณีการใช้งานต่อไปนี้:
อย่าลังเลที่จะแยก repo นี้และใช้เป็นแม่แบบสำหรับการพัฒนาแอปพลิเคชัน GPT ของคุณเอง
เราต้องการในที่สุดรวมถึงการปรับแต่ง RL อย่างละเอียดของ CHATGPT โดยทั่วไปสิ่งนี้ไม่ได้เปลี่ยนรูปแบบความรู้พื้นฐาน แต่ทำให้การมีปฏิสัมพันธ์กับโมเดลเหมือนมนุษย์มากขึ้น
การตั้งค่ารหัสค่อนข้างน้อยและสามารถทำซ้ำได้อย่างง่ายดายในสภาพแวดล้อมท้องถิ่นหรือคลาวด์ VM*
conda create -n python38 python=3.8
conda activate python38
conda install --file requirements.txt
* ในอนาคตเราจะพยายามจัดเตรียมเวอร์ชันนักเทียบท่าของการตั้งค่านี้
เราให้บริการโค้ดตัวอย่างที่ดาวน์โหลดและประมวลผลชุดข้อมูลลิ้นเล็ก ๆ สำหรับการฝึกอบรมและการปรับแต่ง ใช้รหัสนี้เป็นเทมเพลตเพื่อสร้างข้อมูลล่วงหน้าสำหรับข้อมูลของคุณเอง
python src/data_io/fetch_shakespeare.py
การฝึกอบรมรุ่น GPT ขนาดเล็กมากตั้งแต่เริ่มต้นบนชุดข้อมูล Shakespeare Tiny-Shakespeare ที่สร้างขึ้นในขั้นตอนก่อนหน้า โมเดลที่ได้จะไม่สามารถใช้งานได้ทั่วไปมากนักเนื่องจากค่อนข้างเล็กและได้รับการฝึกฝนในชุดข้อมูลขนาดเล็กมาก แต่สามารถสร้างคำพูดที่เหมือนเช็คสเปียร์ได้
เปลี่ยนไฟล์การกำหนดค่าและเพื่อฝึกอบรมโมเดลตั้งแต่เริ่มต้นข้อมูลของคุณเอง ณ จุดนี้คุณสามารถปรับขนาดให้มีขนาดโมเดลที่มีขนาดใหญ่มากตามขนาดและทรัพยากรของข้อมูลของคุณ*
python src/training/train_main.py --config_file config/train_shakespeare_small.yml
* สำหรับขั้นตอนนี้คุณอาจต้องใช้ GPU หนึ่งหรือหลายตัว
ปรับแต่งโมเดล GPT2 โอเพ่นซอร์สบนข้อมูลของคุณเอง เป็นไปได้ที่จะใช้แบบจำลอง GPT แบบโอเพนซอร์ส (GPT2-Medium, GPT2-XL ฯลฯ ) นี่เป็นตัวเลือกทั่วไปเนื่องจากต้องใช้ข้อมูลและทรัพยากรน้อยลง (เป็นไปได้ที่จะเรียกใช้สิ่งนี้แม้ใน CPU) และเร็วกว่าการฝึกอบรมตั้งแต่เริ่มต้น
python src/training/train_main.py --config_file config/finetune_shakespeare.yml
ตัวอย่างเอาต์พุตจำนวนหนึ่งจากรูปแบบที่ผ่านการฝึกอบรมโดยให้พรอมต์อินพุต สิ่งนี้สามารถใช้สำหรับการอนุมานแบทช์
python src/inference/sample_main.py --config_file config/sample_shakespeare.yml
เซิร์ฟเวอร์ Lightweigth ที่ให้บริการรุ่นที่ผ่านการฝึกอบรมใน REST API
uvicorn src.inference.service_main:app --reload --reload-include config/sample_gpt2.yml
เมื่อเซิร์ฟเวอร์ทำงานอยู่คุณสามารถสืบค้นจุดสิ้นสุดด้วยพรอมต์ (ตามคำขอโพสต์) สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับข้อมูลเฉพาะของการสืบค้นให้ดูสคริปต์ทดสอบต่อไปนี้
เมื่อเซิร์ฟเวอร์ของคุณทำงานแล้วคุณสามารถทดสอบจุดสิ้นสุดโดยใช้สคริปต์ต่อไปนี้
python src/inference/test_query.py
repo นี้ได้รับการปรับใช้โดยมีแอปพลิเคชันการผลิตอยู่ในใจและรวมถึงการทดสอบหน่วยและการรวม
* Tesing ไม่ใช่ ATM ที่กว้างขวาง แต่เราจะพยายามเพิ่มความครอบคลุมในอนาคต
การทดสอบหน่วยได้รับการรวมเพื่อครอบคลุมฟังก์ชันหลัก คุณสามารถเรียกใช้ชุดทดสอบหน่วยเต็มด้วยคำสั่งต่อไปนี้:
pytest test/unit/
นอกเหนือจากการทดสอบหน่วยเราได้รวมการทดสอบการรวมเข้าด้วยกันสำหรับการฝึกอบรมการปรับแต่งและเวิร์กโฟลว์การสุ่มตัวอย่าง
pytest test/integration/
* การทดสอบการรวมปัจจุบันต้องการข้อมูลในการทำงาน (ดูด้านบน)
โดยทั่วไปจะแนะนำให้เปิดใช้งาน hooks ล่วงหน้าเมื่อทำงานกับ repo ขณะนี้เรียกใช้การตรวจสอบการจัดรูปแบบพื้นฐานและเรียกใช้ชุดทดสอบหน่วย (แต่ไม่ใช่การทดสอบการรวม)
conda install -c conda-forge pre-commit
pre-commit install
การใช้งาน GPT ใน repo นี้ได้รับแรงบันดาลใจจาก Nanogpt repo โดย Andrej Karpathy เป้าหมายของเราคือการดำเนินการใหม่โครงสร้างใหม่และขยายด้วยโมดูลที่ทำให้ง่ายต่อการสร้างแอพพลิเคชั่นการผลิตประเภทต่าง ๆ ที่อยู่ด้านบน