งานวิจัย · arXiv 2407.17789
Very Large-Scale Multi-Agent Simulation in AgentScope
สรุปสามบรรทัด
- 🎯 แพลตฟอร์มการจำลอง multi-agent เผชิญกับปัญหาคอขวดหลักด้านการปรับขยายขนาด ความหลากหลายของประชากร agent และการจัดการวงจรชีวิตบนหลายอุปกรณ์ในระดับมหึมา
- 🔧 ใช้งานกลไกแบบกระจายศูนย์บนพื้นฐาน actor ด้วยโหมดโพรเซสแบบหนึ่งต่อหนึ่งและหลายต่อหนึ่ง การแปลงเวิร์กโฟลว์อัตโนมัติผ่าน to_dist สภาพแวดล้อมหลายชั้น และตัวสร้าง persona อัตโนมัติ
- 📈 ประสบความสำเร็จในการจำลอง 1 ล้าน agents บนอุปกรณ์หลาย GPU จำนวน 4 เครื่องในเวลา 12 นาที (Llama3-8B) และเสร็จสิ้นการทดสอบ benchmark แบบ dummy 1M-agent ในเวลาเพียง 40 วินาที
บทคัดย่อ
ความก้าวหน้าล่าสุดของโมเดลภาษาขนาดใหญ่ (LLMs) ได้เปิดโอกาสใหม่ในการประยุกต์ใช้ระบบ multi-agent สำหรับการจำลองขนาดใหญ่มาก อย่างไรก็ตาม ยังคงมีความท้าทายหลายประการในการดำเนินการจำลอง multi-agent ด้วยแพลตฟอร์มที่มีอยู่ เช่น ความสามารถในการปรับขยายขนาดที่จำกัดและประสิทธิภาพต่ำ ความหลากหลายของ agent ที่ไม่เพียงพอ และกระบวนการจัดการที่ต้องใช้แรงงานมาก เพื่อรับมือกับความท้าทายเหล่านี้ เราได้พัฒนาฟีเจอร์และส่วนประกอบใหม่หลายรายการสำหรับ AgentScope ซึ่งเป็นแพลตฟอร์ม multi-agent ที่ใช้งานง่าย เพื่อเพิ่มความสะดวกและความยืดหยุ่นในการรองรับการจำลอง multi-agent ขนาดใหญ่มาก โดยเฉพาะอย่างยิ่ง เราเสนอกลไกแบบกระจายศูนย์บนพื้นฐานของ actor เพื่อเป็นโครงสร้างพื้นฐานทางเทคโนโลยีสู่ความสามารถในการปรับขยายขนาดที่ยอดเยี่ยมและประสิทธิภาพสูง พร้อมทั้งสนับสนุนสภาพแวดล้อมที่ยืดหยุ่นสำหรับการจำลองสถานการณ์จริงที่หลากหลาย ซึ่งช่วยให้สามารถรันหลาย agent พร้อมกันได้ การแปลงเวิร์กโฟลว์อัตโนมัติสำหรับการปรับใช้แบบกระจายศูนย์ รวมถึงการโต้ตอบระหว่าง agent ด้วยกันและระหว่าง agent กับสภาพแวดล้อม นอกจากนี้ เรายังรวมเครื่องมือปรับแต่งที่ใช้งานง่ายและไปป์ไลน์การสร้างเบื้องหลังอัตโนมัติไว้ใน AgentScope เพื่อลดความซับซ้อนในกระบวนการสร้าง agent ที่มีภูมิหลังหลากหลายและมีรายละเอียดครบถ้วน ท้ายที่สุด เราได้จัดเตรียมอินเทอร์เฟซบนเว็บเพื่อความสะดวกในการตรวจสอบและจัดการ agent จำนวนมากที่อาจปรับใช้ข้ามอุปกรณ์หลายเครื่อง เราได้ทำการจำลองอย่างครอบคลุมเพื่อแสดงให้เห็นถึงประสิทธิภาพของการปรับปรุงที่นำเสนอใน AgentScope นี้ พร้อมทั้งให้ข้อสังเกตโดยละเอียดและการอภิปรายเชิงลึกเพื่อเน้นย้ำถึงศักยภาพอันยอดเยี่ยมของการประยุกต์ใช้ระบบ multi-agent ในการจำลองขนาดใหญ่ โค้ดต้นฉบับได้รับการเผยแพร่บน GitHub ที่ https://github.com/modelscope/agentscope/tree/main/examples/paper_large_scale_simulation เพื่อสร้างแรงบันดาลใจในการวิจัยและพัฒนาการจำลอง multi-agent ขนาดใหญ่ต่อไป
บทคัดย่อต้นฉบับ (ภาษาอังกฤษ)
Recent advances in large language models (LLMs) have opened new avenues for applying multi-agent systems in very large-scale simulations. However, there remain several challenges when conducting multi-agent simulations with existing platforms, such as limited scalability and low efficiency, unsatisfied agent diversity, and effort-intensive management processes. To address these challenges, we develop several new features and components for AgentScope, a user-friendly multi-agent platform, enhancing its convenience and flexibility for supporting very large-scale multi-agent simulations. Specifically, we propose an actor-based distributed mechanism as the underlying technological infrastructure towards great scalability and high efficiency, and provide flexible environment support for simulating various real-world scenarios, which enables parallel execution of multiple agents, automatic workflow conversion for distributed deployment, and both inter-agent and agent-environment interactions. Moreover, we integrate an easy-to-use configurable tool and an automatic background generation pipeline in AgentScope, simplifying the process of creating agents with diverse yet detailed background settings. Last but not least, we provide a web-based interface for conveniently monitoring and managing a large number of agents that might deploy across multiple devices. We conduct a comprehensive simulation to demonstrate the effectiveness of these proposed enhancements in AgentScope, and provide detailed observations and insightful discussions to highlight the great potential of applying multi-agent systems in large-scale simulations. The source code is released on GitHub at https://github.com/modelscope/agentscope/tree/main/examples/paper_large_scale_simulation to inspire further research and development in large-scale multi-agent simulations.
คู่มือการอ่าน
ปัญหาและแรงจูงใจ
Agent ที่ใช้โมเดลภาษาขนาดใหญ่ (LLM) ช่วยให้สามารถจำลองสถานการณ์ที่มีการโต้ตอบและสมจริงได้โดยไม่ต้องเขียนโค้ดกำหนดกฎเกณฑ์ด้วยตนเองอย่างครอบคลุม อย่างไรก็ตาม การปรับขยายการจำลอง multi-agent ไปสู่ขนาดประชากรที่สมจริงทำให้พบปัญหาคอขวดสำคัญสามประการ:
- ขีดจำกัดด้านความสามารถในการปรับขยายและประสิทธิภาพ: การประมวลผลแบบรวมศูนย์และ Global Interpreter Lock (GIL) ของ Python ขัดขวางการทำงานของ agent เฟรมเวิร์ก actor ที่มีอยู่ (เช่น Ray) จะเปิดโพรเซสใหม่ต่อหนึ่ง actor ซึ่งสิ้นเปลืองทรัพยากรเมื่อต้องจัดการกับ agent น้ำหนักเบาที่ติด I/O จำนวนหลายล้านตัว
- การกระจายตัวของประชากรและความหลากหลายของ agent ไม่เพียงพอ: Agent ที่มีพรอมต์ภูมิหลังเรียบง่ายและเหมือนกันจะมีพฤติกรรมที่เป็นเนื้อเดียวกัน ไม่สามารถสะท้อนการกระจายตัวทางประชากรศาสตร์ที่สมจริงได้ (เช่น ระดับการศึกษา อายุ หรืออาชีพ)
- การจัดการที่ยุ่งยาก: การจัดระเบียบ การสั่งรัน การตรวจสอบ และการยุติการทำงานของ agent หลายแสนหรือหลายล้านตัวที่กระจายอยู่ทั่วคลัสเตอร์จำเป็นต้องใช้ภาระงานด้านการดำเนินงานอย่างมหาศาล
แนวคิดหลัก
- สถาปัตยกรรมแบบกระจายศูนย์บนพื้นฐาน Actor: Agent ประมวลผลอย่างอิสระในฐานะ actor แพลตฟอร์มรองรับทั้งการจับคู่แบบหนึ่งต่อหนึ่ง (หนึ่งโพรเซสต่อหนึ่ง agent เพื่อหลีกเลี่ยง GIL สำหรับงานที่ใช้การคำนวณสูง) และแบบหลายต่อหนึ่ง (agent แชร์โพรเซสร่วมกันเพื่อใช้ประโยชน์จากการแบ่งเวลาของคอร์ CPU สูงสุดระหว่างการรอ I/O)
- การแปลงเป็นระบบกระจายศูนย์แบบไม่ต้องเขียนโค้ดใหม่ (
to_dist): ผู้ใช้เขียนเวิร์กโฟลว์แบบรวมศูนย์ ซึ่งจะถูกแปลงไปเป็นการตั้งค่าแบบกระจายศูนย์โดยอัตโนมัติโดยใช้ local proxy และ asynchronous message placeholder - สิ่งแวดล้อมในฐานะ Agent: สภาพแวดล้อมได้รับการจำลองขึ้นในรูปแบบของ agent พิเศษที่รองรับการคงสถานะ การเข้าถึงพร้อมกันสูงผ่าน RPC ทริกเกอร์แบบสองทิศทาง (ผ่าน listener) และโครงสร้างหลายชั้นแบบซ้อนกันสำหรับการจำลองระดับกลุ่ม
- ไปป์ไลน์ประชากรต่างชนิดที่ปรับแต่งได้: ผู้ใช้กำหนดการกระจายตัวทางประชากรศาสตร์ในไฟล์คอนฟิกูเรชัน และไปป์ไลน์ meta-prompt ของ LLM จะสร้าง persona ของ agent ที่มีเอกลักษณ์เฉพาะตัวและหลากหลาย
- Agent-Manager: อินเทอร์เฟซแบบกราฟิกบนเว็บและเครือข่ายเซิร์ฟเวอร์ระยะไกลแบบคงอยู่ เพื่อปรับใช้ ตรวจสอบ และล้างข้อมูล agent ทั่วทั้งโหนดในคลัสเตอร์
วิธีการ
การประมวลผลแบบกระจายศูนย์และการแปลงอัตโนมัติ
ใน AgentScope นั้น agent อิสระจะทำงานพร้อมกัน เมื่อไปป์ไลน์แบบรวมศูนย์ถูกกำหนดแท็กด้วย .to_dist() จะเกิดสองขั้นตอนขึ้น:
- Distributed agent จะถูกสร้างขึ้นข้าม worker ระยะไกล โดยออบเจกต์ proxy น้ำหนักเบาจะยังคงอยู่บนตัวจัดระเบียบส่วนกลาง (central orchestrator)
- Proxy จะส่งคืน message placeholder ทันทีเมื่อได้รับคำสั่งเรียกใช้งาน Agent ปลายน้ำจะบล็อกการทำงานเฉพาะเมื่อตรวจสอบ placeholder ที่ชี้ไปยังการคำนวณที่ยังค้างอยู่จาก agent ก่อนหน้าเท่านั้น
พลวัตของการจำลอง
แพลตฟอร์มจะประเมินการใช้เหตุผลแบบ multi-agent ในเกมคลาสสิก "ทาย ของค่าเฉลี่ย" (guess of the average) โดย agent แต่ละตัว จะส่งค่า เป้าหมายที่ชนะคือ: เมื่อเล่นซ้ำภายใต้ความรู้ร่วมกันเรื่องความเป็นเหตุเป็นผล ดุลยภาพแนช (Nash equilibrium) เพียงหนึ่งเดียวจะลู่เข้าสู่ ในการทดลองทางเลือกที่ทดสอบการวางนัยทั่วไปนอกเหนือจากข้อมูลการฝึกฝนก่อนหน้า กฎเป้าหมายได้รับการปรับเป็น: การตั้งค่า จะให้ผลลัพธ์เป็นดุลยภาพแนชที่ไม่เป็นศูนย์:
ผลลัพธ์
- ความสามารถในการปรับขยายขนาด: การจำลอง agent 1,000,000 ตัวเสร็จสิ้นภายใน 12 นาที โดยใช้ 4 โหนด (แต่ละโหนดมี 8 A100-80G GPUs, 64 CPU cores, 1 TB RAM) โดยใช้ Llama3-8B พร้อมพรอมต์พื้นฐาน และใน 85 นาที ด้วย Chain-of-Thought (CoT) prompting (ซึ่งเพิ่มจำนวนโทเคนมากกว่า 150 เท่า) ในการทดสอบ benchmark ด้วยการคำนวณแบบ dummy ที่ตัดเวลาหน่วงของการอนุมาน LLM ออกไป agent 1 ล้านตัวทำงานเสร็จใน 40 วินาที เมื่อเทียบกับ 8.6 ชั่วโมง ผ่าน asynchronous I/O มาตรฐานของ Python และ ประมาณ 12 วัน ผ่านการประมวลผลแบบเรียงลำดับ
- การขยายขนาดในแนวนอน: เมื่อกำหนด 10,000 agents ต่ออุปกรณ์คงที่ ระยะเวลาการทำงานโดยรวมยังคงที่แม้ขนาดของคลัสเตอร์จะเพิ่มขึ้นจาก 1 เป็น 4 โหนด
- การใช้พรอมต์และความลึกของการใช้เหตุผล: ภายใต้พรอมต์พื้นฐาน โมเดลส่วนใหญ่ส่งค่ารายงานประมาณ 50 (แม้ว่า MistralAI-8x7B จะมีค่าเฉลี่ย 36.63 และ MistralAI-8x22B จะมีค่าเฉลี่ย 31.69) การเพิ่มคำสั่ง CoT ทำให้ค่ารายงานลดลงเข้าใกล้ 0 (ตัวเลขที่ชนะของ Qwen2-72B ลดลงจาก 33.70 เหลือ 12.76 และค่าเฉลี่ยในรอบที่ 5 ของการเล่นหลายรอบลดลงจาก 25.16 เหลือ 2.02)
- ประชากรศาสตร์และบทบาท: ระดับการศึกษาที่กำหนดให้สูงขึ้นทำให้การคาดเดาลดลงอย่างเป็นระบบและสอดคล้องกับทฤษฎีเกมที่เหมาะสมที่สุดมากขึ้น (agent ที่เป็นระดับปริญญาเอกรายงานตัวเลขต่ำกว่า agent ระดับประถมศึกษา) อาชีพอย่างอาจารย์สอนทฤษฎีเกมและนักเศรษฐศาสตร์รายงานตัวเลขต่ำที่สุด
- ตัวแปรเสริม: เมื่อดุลยภาพถูกเปลี่ยนเป็น 10 () agent จะค่อย ๆ ลู่เข้าใกล้ 10 จากการเล่นซ้ำหลายรอบ
ข้อจำกัดและประเด็นเปิด
- ความไม่สอดคล้องของการสวมบทบาทในกรณีขอบเขต (edge case): เมื่อได้รับพรอมต์ให้ทำหน้าที่เป็นเด็กอายุ 7 ขวบ agent ยังคงดำเนินการคำนวณทางคณิตศาสตร์หลายขั้นตอนและการใช้เหตุผลแบบเรียกซ้ำซึ่งขัดแย้งกับ persona นั้น
- ข้อผิดพลาดทางคณิตศาสตร์พื้นฐาน: ในบางครั้ง agent มีการคำนวณคณิตศาสตร์ขั้นพื้นฐานผิดพลาด (โดยเฉพาะเรื่องเศษส่วนหรือทศนิยม) แม้ว่าตรรกะการใช้เหตุผลเชิงกลยุทธ์จะถูกต้องก็ตาม
- ความไวต่อข้อมูลความรู้เดิมในการเทรน: การเปลี่ยนอัตราส่วนเป้าหมายจาก เป็น ทำให้ประสิทธิภาพลดลงเนื่องจากโมเดลพึ่งพารูปแบบทฤษฎีเกมที่ท่องจำมา ประสิทธิภาพจะฟื้นตัวก็ต่อเมื่อพรอมต์ระบุไว้อย่างชัดเจนว่าเกมนี้เป็นรูปแบบหนึ่งของเกม "ทาย ของค่าเฉลี่ย"
คำศัพท์สำคัญ
- AgentScope
- แพลตฟอร์ม multi-agent ที่ออกแบบมาสำหรับแอปพลิเคชันที่ใช้ LLM ซึ่งได้รับการขยายขีดความสามารถที่นี่เพื่อรองรับการจำลองแบบกระจายศูนย์ขนาดใหญ่มาก
- Actor Model
- กระบวนทัศน์การคำนวณแบบทำงานพร้อมกัน โดยแต่ละ actor ทำหน้าที่เป็นหน่วยประมวลผลอิสระที่สื่อสารผ่านการส่งข้อความโดยไม่มีการแชร์หน่วยความจำร่วมกัน
- to_dist
- ฟังก์ชันในตัวของ AgentScope ที่แปลงเวิร์กโฟลว์ multi-agent แบบรวมศูนย์ที่เขียนขึ้นตามลำดับให้กลายเป็นไปป์ไลน์การทำงานแบบกระจายศูนย์โดยใช้ proxy และ placeholder
- Placeholders
- โทเคนการตอบกลับแบบอะซิงโครนัสที่ส่งคืนทันทีโดย proxy agent เพื่อให้ตัวจัดระเบียบทำงานต่อไปได้โดยไม่หยุดรอบล็อกผลลัพธ์จาก worker ระยะไกล
- Agent-Manager
- แดชบอร์ดภาพบนเว็บส่วนกลางและโครงสร้างพื้นฐานเซิร์ฟเวอร์ daemon ที่ใช้เพื่อปรับใช้ สังเกตการณ์ และจัดการวงจรชีวิตของ agent ข้ามโหนดในคลัสเตอร์ระยะไกล
- Guess 2/3 of the Average
- เบঞ্চมาร์กทฤษฎีเกมแบบคลาสสิกที่ผู้เล่นเลือกตัวเลขในช่วง [0, 100] โดยมีเป้าหมายเพื่อให้ตรงกับ 2/3 ของค่าเฉลี่ยทั้งหมด ซึ่งมีดุลยภาพแนชทางทฤษฎีอยู่ที่ 0
- Many-to-One Multi-Process Mode
- โหมดการทำงานของ AgentScope ที่มีหลาย agent อาศัยอยู่ในโพรเซสระบบปฏิบัติการเดียว เพื่อแชร์เธรด คอร์ CPU และพอร์ตเครือข่ายระหว่างการรอ I/O
คำถามที่พบบ่อย
AgentScope สามารถจำลอง agent ได้พร้อมกันสูงสุดกี่ตัว?
คณะผู้เขียนได้สาธิตการจำลองที่มี active agent สูงสุดถึง 1,000,000 ตัว โดยทำงานบนคลัสเตอร์โหนดจริง 4 โหนด (แต่ละโหนดติดตั้ง GPU A100-80G จำนวน 8 ตัว)
AgentScope หลีกเลี่ยงข้อจำกัดของ Python GIL ในการทำงานแบบขนานขนาดใหญ่ได้อย่างไร?
ระบบใช้การประมวลผลหลายโพรเซสบนพื้นฐาน actor โดยมีสองโหมดการทำงาน: หนึ่งต่อหนึ่ง (หนึ่งโพรเซสต่อหนึ่ง agent) สำหรับงานที่ใช้การคำนวณสูง และหลายต่อหนึ่ง (หลาย agent แชร์หนึ่งโพรเซส) สำหรับงานที่ต้องรอ API และติด I/O ช่วยหลีกเลี่ยงการแย่งชิง GIL ผ่านทาง Remote Procedure Calls
การสร้างประชากร agent ที่สมจริงทำได้อย่างไร?
ผู้ใช้จะป้อนการกระจายตัวทางประชากรศาสตร์ระดับสูง (เช่น การศึกษา เพศ อายุ และอาชีพ) ในไฟล์คอนฟิกูเรชัน ซึ่งไปป์ไลน์ meta-prompt ที่ขับเคลื่อนด้วย LLM จะสุ่มตัวอย่างและขยายรายละเอียดเป็นประวัติตัวละครอย่างละเอียด
จะเกิดอะไรขึ้นเมื่อกฎของเกมเบี่ยงเบนไปจากเบ้นช์มาร์กทฤษฎีเกมมาตรฐาน?
เมื่อเปลี่ยนอัตราส่วนเป็น 51/100 หรือเปลี่ยนสูตรเป้าหมายเป็น 5 + 1/2 ของค่าเฉลี่ย ในตอนแรก agent จะประสบปัญหาเนื่องจากความรู้เดิมที่ท่องจำมา แต่การเพิ่มบริบทประกอบหรือพรอมต์แบบ CoT จะช่วยให้โมเดลอย่าง Qwen2-72B และ MistralAI-8x22B สามารถลู่เข้าสู่จุดดุลยภาพใหม่ได้สำเร็จ
คำอธิบายในหน้านี้เขียนโดย AI จากงานวิจัยและอาจมีข้อผิดพลาด โปรดอ่านต้นฉบับเพื่อดูรายละเอียด