สถานะโครงการ: ไม่ได้รับการบำรุงรักษาอีกต่อไป!
น่าเสียดายที่ฉันไม่สามารถพัฒนาหรือให้การสนับสนุนโครงการต่อไปได้อีกต่อไป
Reaver เป็นเฟรมเวิร์กการเรียนรู้เสริมเชิงลึกแบบแยกส่วนโดยมุ่งเน้นไปที่งานต่างๆ ที่ใช้ StarCraft II ตามรอยของ DeepMind ที่กำลังผลักดันความล้ำสมัยของสนามผ่านเลนส์ของการเล่นวิดีโอเกมสมัยใหม่ที่มีอินเทอร์เฟซที่เหมือนมนุษย์และ ข้อจำกัด ซึ่งรวมถึงการสังเกตลักษณะภาพที่คล้ายคลึงกัน (แต่ไม่เหมือนกัน) กับสิ่งที่ผู้เล่นมนุษย์จะรับรู้ และเลือกการกระทำจากตัวเลือกที่คล้ายกันที่ผู้เล่นมนุษย์จะมี ดูบทความ StarCraft II: ความท้าทายใหม่สำหรับการเรียนรู้แบบเสริมกำลัง สำหรับรายละเอียดเพิ่มเติม
แม้ว่าการพัฒนาจะขับเคลื่อนด้วยการวิจัย แต่ปรัชญาเบื้องหลัง Reaver API ก็คล้ายกับเกม StarCraft II นั่นเอง - มันมีบางอย่างที่จะนำเสนอสำหรับทั้งมือใหม่และผู้เชี่ยวชาญในสาขานี้ สำหรับโปรแกรมเมอร์มือสมัครเล่น Reaver นำเสนอเครื่องมือทั้งหมดที่จำเป็นในการฝึกอบรมตัวแทน DRL โดยการปรับเปลี่ยนเฉพาะส่วนเล็กๆ ที่แยกออกจากกันของตัวแทน (เช่น ไฮเปอร์พารามิเตอร์) สำหรับนักวิจัยรุ่นเก๋า Reaver นำเสนอโค้ดเบสที่เรียบง่ายแต่เพิ่มประสิทธิภาพด้วยสถาปัตยกรรมแบบโมดูลาร์ เอเจนต์ โมเดล และสภาพแวดล้อมจะถูกแยกออกจากกันและสามารถสลับได้ตามต้องการ
แม้ว่า Reaver จะมุ่งเน้นไปที่ StarCraft II แต่ก็ยังได้รับการสนับสนุนอย่างเต็มที่สำหรับสภาพแวดล้อมยอดนิยมอื่น ๆ โดยเฉพาะ Atari และ MuJoCo อัลกอริธึมของตัวแทน Reaver ได้รับการตรวจสอบความถูกต้องกับผลลัพธ์การอ้างอิง เช่น ตัวแทน PPO สามารถจับคู่อัลกอริธึมการเพิ่มประสิทธิภาพนโยบายใกล้เคียงได้ โปรดดูด้านล่างสำหรับรายละเอียดเพิ่มเติม
วิธีที่ง่ายที่สุดในการติดตั้ง Reaver คือผ่านตัวจัดการแพ็คเกจ PIP
:
pip install reaver
คุณยังสามารถติดตั้งบริการพิเศษเพิ่มเติม (เช่น การสนับสนุน gym
) ผ่านแฟล็กตัวช่วย:
pip install reaver[gym,atari,mujoco]
หากคุณวางแผนที่จะแก้ไขโค้ดเบส Reaver
คุณสามารถคงฟังก์ชันการทำงานของโมดูลไว้ได้โดยการติดตั้งจากแหล่งที่มา:
$ git clone https://github.com/inoryy/reaver-pysc2
$ pip install -e reaver-pysc2/
เมื่อติดตั้งด้วย -e
flag Python
จะค้นหา reaver
ในโฟลเดอร์ที่ระบุ แทนที่จะเป็นที่เก็บข้อมูล site-packages
โปรดดูหน้าวิกิสำหรับคำแนะนำโดยละเอียดเกี่ยวกับการตั้งค่า Reaver บน Windows
อย่างไรก็ตาม หากเป็นไปได้ โปรดพิจารณาใช้ Linux OS
แทน - เนื่องจากการพิจารณาด้านประสิทธิภาพและความเสถียร หากคุณต้องการให้ตัวแทนของคุณทำงานโดยเปิดใช้งานกราฟิกเต็มรูปแบบ คุณสามารถบันทึกการเล่นซ้ำของตัวแทนบน Linux และเปิดบน Windows ได้ นี่คือวิธีการบันทึกวิดีโอที่แสดงด้านล่างนี้
หากคุณต้องการใช้ Reaver กับสภาพแวดล้อมอื่นๆ ที่รองรับ คุณต้องติดตั้งแพ็คเกจที่เกี่ยวข้องด้วย:
คุณสามารถฝึกอบรมตัวแทน DRL ด้วยสภาพแวดล้อม StarCraft II หลายรายการที่ทำงานขนานกันโดยใช้โค้ดเพียงสี่บรรทัด!
import reaver as rvr
env = rvr . envs . SC2Env ( map_name = 'MoveToBeacon' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec (), rvr . models . build_fully_conv , rvr . models . SC2MultiPolicy , n_envs = 4 )
agent . run ( env )
นอกจากนี้ Reaver ยังมาพร้อมกับเครื่องมือบรรทัดคำสั่งที่สามารถกำหนดค่าได้สูง ดังนั้นงานนี้จึงสามารถลดเหลือเพียงงานเดียวสั้นๆ ได้!
python -m reaver.run --env MoveToBeacon --agent a2c --n_envs 4 2> stderr.log
ด้วยบรรทัดด้านบน Reaver จะเริ่มต้นขั้นตอนการฝึกอบรมด้วยชุดของไฮเปอร์พารามิเตอร์ที่กำหนดไว้ล่วงหน้า ซึ่งปรับให้เหมาะสมที่สุดสำหรับสภาพแวดล้อมและตัวแทนที่กำหนดโดยเฉพาะ หลังจากนั้นไม่นาน คุณจะเริ่มเห็นบันทึกพร้อมสถิติที่เป็นประโยชน์มากมายในหน้าจอเทอร์มินัลของคุณ
| T 118 | Fr 51200 | Ep 212 | Up 100 | RMe 0.14 | RSd 0.49 | RMa 3.00 | RMi 0.00 | Pl 0.017 | Vl 0.008 | El 0.0225 | Gr 3.493 | Fps 433 |
| T 238 | Fr 102400 | Ep 424 | Up 200 | RMe 0.92 | RSd 0.97 | RMa 4.00 | RMi 0.00 | Pl -0.196 | Vl 0.012 | El 0.0249 | Gr 1.791 | Fps 430 |
| T 359 | Fr 153600 | Ep 640 | Up 300 | RMe 1.80 | RSd 1.30 | RMa 6.00 | RMi 0.00 | Pl -0.035 | Vl 0.041 | El 0.0253 | Gr 1.832 | Fps 427 |
...
| T 1578 | Fr 665600 | Ep 2772 | Up 1300 | RMe 24.26 | RSd 3.19 | RMa 29.00 | RMi 0.00 | Pl 0.050 | Vl 1.242 | El 0.0174 | Gr 4.814 | Fps 421 |
| T 1695 | Fr 716800 | Ep 2984 | Up 1400 | RMe 24.31 | RSd 2.55 | RMa 30.00 | RMi 16.00 | Pl 0.005 | Vl 0.202 | El 0.0178 | Gr 56.385 | Fps 422 |
| T 1812 | Fr 768000 | Ep 3200 | Up 1500 | RMe 24.97 | RSd 1.89 | RMa 31.00 | RMi 21.00 | Pl -0.075 | Vl 1.385 | El 0.0176 | Gr 17.619 | Fps 423 |
Reaver ควรมารวมกันอย่างรวดเร็วที่ประมาณ 25-26 RMe
(รางวัลตอนเฉลี่ย) ซึ่งตรงกับผลลัพธ์ของ DeepMind สำหรับสภาพแวดล้อมนี้ เวลาการฝึกอบรมที่เฉพาะเจาะจงขึ้นอยู่กับฮาร์ดแวร์ของคุณ บันทึกข้างต้นจัดทำขึ้นบนแล็ปท็อปที่ใช้ CPU Intel i5-7300HQ (4 คอร์) และ GTX 1050 GPU การฝึกอบรมใช้เวลาประมาณ 30 นาที
หลังจากที่ Reaver เสร็จสิ้นการฝึกอบรม คุณสามารถดูประสิทธิภาพของมันได้โดยการผนวก --test
และ --render
flags เข้ากับ one-liner
python -m reaver.run --env MoveToBeacon --agent a2c --test --render 2> stderr.log
สมุดบันทึกโน้ตบุ๊ก Google Colab ที่ใช้ร่วมกับ Reaver พร้อมให้ทดลองใช้งานออนไลน์แล้ว
อัลกอริธึม DRL สมัยใหม่จำนวนมากต้องอาศัยการดำเนินการในหลายสภาพแวดล้อมพร้อมๆ กัน เนื่องจาก Python มี GIL คุณสมบัตินี้จึงต้องถูกนำไปใช้ผ่านการประมวลผลหลายตัว การใช้งานโอเพ่นซอร์สส่วนใหญ่จะแก้ปัญหานี้ด้วยวิธีข้อความ (เช่น Python multiprocessing.Pipe
หรือ MPI
) โดยที่แต่ละกระบวนการสื่อสารโดยการส่งข้อมูลผ่าน IPC นี่เป็นแนวทางที่ถูกต้องและมีแนวโน้มมากที่สุดเท่านั้นสำหรับแนวทางการกระจายขนาดใหญ่ที่บริษัทต่างๆ เช่น DeepMind และ openAI ดำเนินการอยู่
อย่างไรก็ตาม สำหรับนักวิจัยทั่วไปหรือผู้ที่ชื่นชอบงานอดิเรก สถานการณ์ทั่วไปที่มากกว่านั้นคือการเข้าถึงสภาพแวดล้อมของเครื่องเดียวเท่านั้น ไม่ว่าจะเป็นแล็ปท็อปหรือโหนดบนคลัสเตอร์ HPC Reaver ได้รับการปรับให้เหมาะสมสำหรับกรณีนี้โดยเฉพาะโดยการใช้หน่วยความจำที่ใช้ร่วมกันในลักษณะที่ไม่มีการล็อค แนวทางนี้ช่วยเพิ่มประสิทธิภาพอย่างมีนัยสำคัญได้สูงสุดถึง 1.5 เท่า ในอัตราการสุ่มตัวอย่าง StarCraft II (และเพิ่มขึ้นสูงสุด 100 เท่าในกรณีทั่วไป) ซึ่งแทบจะเกิดปัญหาคอขวดโดยไปป์ไลน์อินพุต/เอาท์พุตของ GPU เกือบทั้งหมด
โมดูล Reaver หลักสามโมดูล ได้แก่ envs
models
และ agents
แยกออกจากกันเกือบทั้งหมด สิ่งนี้ทำให้มั่นใจได้ว่าการขยายฟังก์ชันการทำงานในโมดูลหนึ่งจะรวมเข้ากับโมดูลอื่นๆ ได้อย่างราบรื่น
การกำหนดค่าทั้งหมดได้รับการจัดการผ่าน gin-config และสามารถแชร์เป็นไฟล์ .gin
ได้อย่างง่ายดาย ซึ่งรวมถึงไฮเปอร์พารามิเตอร์ อาร์กิวเมนต์สภาพแวดล้อม และคำจำกัดความของโมเดลทั้งหมด
เมื่อทดลองแนวคิดใหม่ๆ สิ่งสำคัญคือต้องได้รับผลตอบรับอย่างรวดเร็ว ซึ่งมักจะไม่สมจริงในสภาพแวดล้อมที่ซับซ้อนเช่น StarCraft II เนื่องจาก Reaver ถูกสร้างขึ้นด้วยสถาปัตยกรรมแบบโมดูลาร์ การใช้งานเอเจนต์จึงไม่เชื่อมโยงกับ StarCraft II เลย คุณสามารถทำการแทนที่แบบดรอปอินสำหรับสภาพแวดล้อมเกมยอดนิยมมากมาย (เช่น openAI gym
) และตรวจสอบว่าการใช้งานใช้งานได้กับสิ่งเหล่านั้นก่อน:
python -m reaver.run --env CartPole-v0 --agent a2c 2> stderr.log
import reaver as rvr
env = rvr . envs . GymEnv ( 'CartPole-v0' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec ())
agent . run ( env )
ปัจจุบัน Reaver รองรับสภาพแวดล้อมต่อไปนี้:
CartPole-v0
)PongNoFrameskip-v0
)InvertedPendulum-v2
และ HalfCheetah-v2
) แผนที่ | รีเวอร์ (A2C) | ดีพมายด์ SC2LE | DeepMind ReDRL | ผู้เชี่ยวชาญเรื่องมนุษย์ |
---|---|---|---|---|
MoveToBeacon | 26.3 (1.8) [21, 31] | 26 | 27 | 28 |
รวบรวม MineralShards | 102.8 (10.8) [81, 135] | 103 | 196 | 177 |
ความพ่ายแพ้แมลงสาบ | 72.5 (43.5) [21, 283] | 100 | 303 | 215 |
ค้นหาและเอาชนะZerglings | 22.1 (3.6) [12, 40] | 45 | 62 | 61 |
เอาชนะ ZerglingsAndBanelings | 56.8 (20.8) [21, 154] | 62 | 736 | 727 |
รวบรวมแร่ธาตุและก๊าซ | 2267.5 (488.8) [0, 3320] | 3,978 | 5,055 | 7,566 |
สร้างนาวิกโยธิน | - | 3 | 123 | 133 |
Human Expert
ได้รับการรวบรวมโดย DeepMind จากผู้เล่นระดับ GrandMasterDeepMind ReDRL
หมายถึงผลลัพธ์ที่ล้ำสมัยในปัจจุบัน ตามที่อธิบายไว้ในบทความ Relational Deep Reinforcement LearningDeepMind SC2LE
เป็นผลลัพธ์ที่เผยแพร่ในบทความ StarCraft II: A New Challenge for Reinforcement LearningReaver (A2C)
คือผลลัพธ์ที่รวบรวมโดยการฝึกอบรมตัวแทน reaver.agents.A2C
โดยจำลองสถาปัตยกรรม SC2LE
ให้ใกล้เคียงที่สุดบนฮาร์ดแวร์ที่มีอยู่ ผลลัพธ์จะถูกรวบรวมโดยการเรียกใช้ตัวแทนที่ได้รับการฝึกอบรมในโหมด --test
เป็นเวลา 100
ตอน โดยคำนวณรางวัลรวมของตอน รายการคือค่าเฉลี่ย ส่วนเบี่ยงเบนมาตรฐาน (ในวงเล็บ) และค่าต่ำสุดและสูงสุด (ในวงเล็บเหลี่ยม)แผนที่ | ตัวอย่าง | ตอน | ประมาณ เวลา (ชม.) |
---|---|---|---|
MoveToBeacon | 563,200 | 2,304 | 0.5 |
รวบรวม MineralShards | 74,752,000 | 311,426 | 50 |
ความพ่ายแพ้แมลงสาบ | 172,800,000 | 1,609,211 | 150 |
ค้นหาและเอาชนะZerglings | 29,760,000 | 89,654 | 20 |
เอาชนะ ZerglingsAndBanelings | 10,496,000 | 273,463 | 15 |
รวบรวมแร่ธาตุและก๊าซ | 16,864,000 | 20,544 | 10 |
สร้างนาวิกโยธิน | - | - | - |
Samples
หมายถึงจำนวน observe -> step -> reward
ทั้งหมดในสภาพแวดล้อม เดียวEpisodes
อ้างถึงจำนวนแฟล็ก StepType.LAST
ทั้งหมดที่ส่งคืนโดย PySC2Approx. Time
คือเวลาการฝึกอบรมโดยประมาณบน laptop
ที่ใช้ CPU Intel i5-7300HQ
(4 คอร์) และ GTX 1050
GPU โปรดทราบว่าฉันไม่ได้ใช้เวลามากนักในการปรับแต่งไฮเปอร์พารามิเตอร์ โดยเน้นที่การตรวจสอบว่าเอเจนต์มีความสามารถในการเรียนรู้มากกว่าการเพิ่มประสิทธิภาพตัวอย่างให้สูงสุด ตัวอย่างเช่น การลอง MoveToBeacon
ครั้งแรกแบบไร้เดียงสาต้องใช้ตัวอย่างประมาณ 4 ล้านตัวอย่าง อย่างไรก็ตาม หลังจากทดลองเล่นไปบ้างแล้ว ฉันสามารถลดมันลงได้จนเหลือ 102,000 (ลดลง ~40x) ด้วยตัวแทน PPO
รางวัลตอนเฉลี่ยที่มี std.dev อยู่ระหว่างนั้น คลิกเพื่อขยาย
ชมการบันทึกวิดีโอของตัวแทนที่แสดงในมินิเกมทั้งหกเกมได้ทางออนไลน์ที่: https://youtu.be/gEyBzcPU5-w ในวิดีโอทางด้านซ้ายคือเจ้าหน้าที่ที่ทำหน้าที่โดยใช้ตุ้มน้ำหนักเริ่มต้นแบบสุ่มและไม่มีการฝึกซ้อม ในขณะที่ทางด้านขวาเขาจะได้รับการฝึกให้กำหนดเป้าหมายคะแนน
ปัญหาความสามารถในการทำซ้ำของการวิจัยได้กลายเป็นประเด็นถกเถียงมากมายในทางวิทยาศาสตร์โดยทั่วไป และการเรียนรู้แบบเสริมกำลังก็ไม่ใช่ข้อยกเว้น เป้าหมายประการหนึ่งของ Reaver ในฐานะโครงการทางวิทยาศาสตร์คือการช่วยอำนวยความสะดวกในการวิจัยที่สามารถทำซ้ำได้ ด้วยเหตุนี้ Reaver จึงมาพร้อมกับเครื่องมือต่างๆ มากมายที่ทำให้กระบวนการง่ายขึ้น:
เพื่อเป็นผู้นำด้านความสามารถในการทำซ้ำ Reaver จึงได้รวมตุ้มน้ำหนักที่ได้รับการฝึกไว้ล่วงหน้าและบันทึกสรุป Tensorboard เต็มรูปแบบสำหรับมินิเกมทั้งหกเกม เพียงดาวน์โหลดไฟล์เก็บถาวรการทดลองจากแท็บเผยแพร่ และแตกไฟล์ลงในไดเร็กทอรี results/
คุณสามารถใช้ตุ้มน้ำหนักที่ได้รับการฝึกล่วงหน้าได้โดยการต่อท้าย --experiment
flag เข้ากับคำสั่ง reaver.run
:
python reaver.run --map <map_name> --experiment <map_name>_reaver --test 2> stderr.log
บันทึกของ Tensorboard จะพร้อมใช้งานหากคุณเปิด tensorboard --logidr=results/summaries
คุณสามารถดูได้โดยตรงทางออนไลน์ผ่าน Aughie Boards
Reaver เป็นยูนิต Protoss ที่พิเศษและน่ารักในจักรวาลเกม StarCraft ในเกมเวอร์ชัน StarCraft: Brood War Reaver มีชื่อเสียงในด้านความช้า เงอะงะ และมักจะไร้ประโยชน์หากปล่อยไว้เพียงลำพังเนื่องจาก AI ในเกมที่บั๊กกี้ อย่างไรก็ตาม ในมือของผู้เล่นที่ทุ่มเทซึ่งทุ่มเทเวลาให้กับการเรียนรู้หน่วย Reaver กลายเป็นหนึ่งในทรัพย์สินที่ทรงพลังที่สุดในเกม โดยมักจะมีบทบาทสำคัญในเกมที่ชนะทัวร์นาเมนต์
รุ่นก่อนของ Reaver ซึ่งมีชื่อว่า pysc2-rl-agent
ได้รับการพัฒนาเป็นส่วนภาคปฏิบัติของวิทยานิพนธ์ระดับปริญญาตรีที่ University of Tartu ภายใต้การดูแลของ Ilya Kuzovkin และ Tambet Matiisen คุณยังคงสามารถเข้าถึงได้ในสาขา v1.0
หากคุณพบปัญหาเกี่ยวกับโค้ดเบส โปรดเปิดตั๋วบน GitHub และอธิบายรายละเอียดให้มากที่สุด หากคุณมีคำถามทั่วไปเพิ่มเติมหรือต้องการคำแนะนำ โปรดส่งอีเมลถึงฉัน
ฉันยังเป็นสมาชิกที่น่าภาคภูมิใจของชุมชนออนไลน์ SC2AI ที่กระตือรือร้นและเป็นมิตร โดยส่วนใหญ่เราใช้ Discord เพื่อการสื่อสาร ยินดีต้อนรับผู้คนจากทุกภูมิหลังและทุกระดับความเชี่ยวชาญ!
หากคุณพบว่า Reaver มีประโยชน์ในการวิจัยของคุณ โปรดพิจารณาอ้างอิงด้วย bibtex ต่อไปนี้:
@misc{reaver,
author = {Ring, Roman},
title = {Reaver: Modular Deep Reinforcement Learning Framework},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/inoryy/reaver}},
}