Pyomo + Ipopt. Vấn đề về tốc độ

Oct 26 2020

Tôi đang sử dụng Pyomo+ Ipoptlàm bộ giải để giải quyết vấn đề NLP. Vấn đề không phải là cực kỳ phức tạp về chiều và số lượng các ràng buộc. Tuy nhiên, tôi được yêu cầu giải quyết hàng nghìn trường hợp của mô hình này với các tham số đầu vào khác nhau. Hiện tại tôi đang sử dụng một for loopđể lặp lại. Giải quyết một trường hợp đơn lẻ mất ~ 1 giây trên 32 GB RAM WindowsPC , Python 3.7.3. Điều đó có nghĩa là tôi phải đợi hàng giờ trước khi có thể lấy toàn bộ kết quả tối ưu hóa.

Tôi đã tìm hiểu về nơi mà thời gian đang được sử dụng. Bản thân việc xây dựng mô hình không mất bất kỳ thời gian nào nhưng việc giải quyết mô hình thông qua Ipoptđó là xác định hiệu suất ở đây.

Tôi muốn biết liệu ai đó đã từng gặp phải vấn đề tương tự trước đây chưa và những cách phổ biến mà người ta có thể thử để đạt được một số loại hiệu suất.

CHỈNH SỬA . Từ một câu hỏi được hỏi ở nơi khác, tôi phát hiện ra rằng:

Hành vi mặc định của Pyomo là viết một *.nltệp, sau đó gọi IPOPT để xử lý tệp đó và tạo ra một *.soltệp. Sau đó, Pyomo phân tích cú pháp lại trong *.soltệp.

Từ điều này, có vẻ như việc đạt được tốc độ tăng có thể không dễ dàng với Pyomo. Vẫn mong được sự hưởng ứng của cộng đồng.

Trả lời

3 NikosKazazakis Oct 27 2020 at 19:21

Mac có thể có ổ đĩa trạng thái rắn, vì vậy nếu máy Windows của bạn không có (hoặc có ổ đĩa xấu hơn), tốc độ I / O có thể là điểm nghẽn của bạn.

Đối với những thời gian chạy nhỏ như thế này, phiên bản Python & Pyomo của bạn cũng có thể là thủ phạm.

Bây giờ khi nói đến việc làm cho quá trình nhanh hơn, tôi e ngại không có giải pháp chung nào khác ngoài việc lập hồ sơ mã Python và xem liệu bạn có thể tối ưu hóa mã hay không. Những gì bạn muốn xem là bao nhiêu giây được sử dụng trong mỗi quy trình Python (trái ngược với tỷ lệ phần trăm), để bạn có thể xác định nơi mà phần lớn thời gian chạy tổng thể của bạn được sử dụng.

Một điều bạn có thể thử để tăng tốc độ là chạy song song nhiều trường hợp của những vấn đề này bằng cách sử dụng hộp công cụ đa xử lý Python. Vì các vấn đề tương tự nhau, bạn không phải lo lắng về việc viết mã không đồng bộ để có được tỷ lệ tốt, điều này làm cho mọi thứ dễ dàng hơn nhiều.

2 your_boy_gorja Oct 27 2020 at 13:20

Tuyên bố từ chối trách nhiệm: Đây không phải là câu trả lời chính xác cho câu hỏi này nhưng nó là một phần thông tin tôi thấy khá hữu ích.

Tôi đã chạy cùng một đoạn mã trên cả PC Windows (32 GB RAM, Windows 10) và Macbook Pro (4GB RAM, Catalina) và thấy mã nhanh hơn khoảng 5 lần trên Mac. Tôi không biết tại sao điều này lại xảy ra nhưng có thể là do quá trình xử lý tệp pyomo.