Pyomo + Ipopt. ปัญหาความเร็ว

Oct 26 2020

ฉันใช้Pyomo+ Ipoptเป็นตัวแก้เพื่อแก้ปัญหา NLP ปัญหาไม่ซับซ้อนอย่างยิ่งในแง่ของมิติข้อมูลและจำนวนข้อ จำกัด อย่างไรก็ตามฉันจำเป็นต้องแก้ไขอินสแตนซ์หลายพันรายการของโมเดลนี้ด้วยพารามิเตอร์อินพุตที่แตกต่างกัน ตอนนี้ฉันกำลังใช้for loopเพื่อวนซ้ำ การแก้ปัญหาในอินสแตนซ์เดียวทำให้ฉันใช้เวลาประมาณ 1 วินาทีบน32 GB RAM Windowsพีซี, Python 3.7.3. นั่นหมายความว่าฉันต้องรอเป็นเวลาหลายชั่วโมงก่อนที่ฉันจะได้รับผลการเพิ่มประสิทธิภาพแบบเต็ม

ฉันดูรายละเอียดเกี่ยวกับเวลาที่หมดลง การสร้างแบบจำลองนั้นไม่ได้ใช้เวลาใด ๆ เช่นนี้ แต่การแก้แบบจำลองผ่านIpoptการกำหนดประสิทธิภาพที่นี่

ฉันอยากทราบว่ามีใครเคยประสบปัญหาคล้าย ๆ กันมาก่อนหรือไม่และมีวิธีใดบ้างที่เราสามารถพยายามเพื่อให้ได้ประสิทธิภาพเพิ่มขึ้น

แก้ไข จากคำถามที่ถามที่อื่นฉันพบว่า:

ลักษณะการทำงานเริ่มต้นของ Pyomo คือการเขียน*.nlไฟล์จากนั้นเรียก IPOPT เพื่อประมวลผลไฟล์นั้นและสร้าง*.solไฟล์ จากนั้น Pyomo จะแยกวิเคราะห์กลับใน*.solไฟล์

จากนี้ดูเหมือนว่าการบรรลุความเร็วที่เพิ่มขึ้นอาจไม่ใช่เรื่องง่ายสำหรับ Pyomo ยังคงรอคอยการตอบสนองของชุมชน

คำตอบ

3 NikosKazazakis Oct 27 2020 at 19:21

Mac อาจมีไดรฟ์โซลิดสเตทดังนั้นหากเครื่อง Windows ของคุณไม่มี (หรือมีเครื่องที่แย่กว่านั้น) ความเร็ว I / O อาจเป็นปัญหาคอขวดของคุณ

สำหรับช่วงเวลาสั้น ๆ เช่นนี้ Python & Pyomo เวอร์ชันของคุณอาจเป็นตัวการได้เช่นกัน

เมื่อพูดถึงการทำให้กระบวนการเร็วขึ้นไม่มีวิธีแก้ปัญหาทั่วไปที่ฉันกลัวนอกจากการสร้างโปรไฟล์โค้ด Python และดูว่าคุณสามารถเพิ่มประสิทธิภาพโค้ดได้หรือไม่ สิ่งที่คุณต้องการดูคือจำนวนวินาทีที่ใช้ไปในแต่ละรูทีน Python (ตรงข้ามกับเปอร์เซ็นต์) เพื่อให้คุณได้มาซึ่งเวลาที่รันไทม์โดยรวมของคุณจำนวนมาก

สิ่งหนึ่งที่คุณสามารถพยายามเร่งความเร็วได้คือการเรียกใช้หลาย ๆ อินสแตนซ์ของปัญหาเหล่านี้พร้อมกันโดยใช้กล่องเครื่องมือการประมวลผลหลายตัวของ Python เนื่องจากปัญหามีความคล้ายคลึงกันคุณจึงไม่ต้องกังวลกับการเขียนโค้ดอะซิงโครนัสเพื่อให้ได้มาตราส่วนที่ดีซึ่งทำให้สิ่งต่างๆง่ายขึ้นมาก

2 your_boy_gorja Oct 27 2020 at 13:20

ข้อจำกัดความรับผิดชอบ:นี่ไม่ใช่คำตอบสำหรับคำถามนี้ แต่เป็นข้อมูลที่ฉันพบว่ามีประโยชน์มาก

ฉันใช้รหัสชิ้นเดียวกันบนพีซี Windows (RAM 32 GB, Windows 10) และ Macbook Pro (RAM 4GB, Catalina) และพบว่ารหัสนั้นเร็วกว่าบน Mac ประมาณ 5 เท่า ฉันไม่รู้ว่าทำไมสิ่งนี้จึงเกิดขึ้น แต่อาจเกิดจากการประมวลผลไฟล์ pyomo