표모 + Ipopt. 속도 문제
NLP 문제를 해결하기 위해 Pyomo+ Ipopt를 솔버로 사용 하고 있습니다. 문제는 차원과 제약의 수 측면에서 그다지 복잡하지 않습니다. 그러나 다른 입력 매개 변수를 사용하여이 모델의 수천 개의 인스턴스를 해결해야합니다. 현재 나는 for loop루프를 사용하고 있습니다. 단일 인스턴스를 해결하는 데 32 GB RAM WindowsPC에서 ~ 1 초가 걸립니다 Python 3.7.3. 즉, 전체 최적화 결과를 검색하려면 몇 시간을 기다려야합니다.
나는 시간이 소비되는 곳을 프로파일 링했습니다. 모델 구축 자체는 시간이 걸리지 않지만이를 통한 모델 해결 Ipopt은 여기서 성능 결정입니다.
누군가가 이전에 비슷한 문제를 겪었는지, 그리고 어떤 종류의 성능 향상을 위해 시도 할 수있는 일반적인 방법은 무엇인지 알고 싶습니다.
편집 . 다른 곳 에서 질문 한 질문에서 다음을 발견했습니다.
Pyomo의 기본 동작은
*.nl파일 을 작성한 다음 IPOPT를 호출하여 해당 파일을 처리하고 파일을 생성하는 것*.sol입니다. 그런 다음 Pyomo는*.sol파일 에서 다시 구문 분석 합니다.
이 점에서 표 모로는 속도 향상이 쉽지 않은 것 같습니다. 여전히 커뮤니티의 반응을 기대하고 있습니다.
답변
Mac에 솔리드 스테이트 드라이브가있을 수 있으므로 Windows 시스템에 솔리드 스테이트 드라이브가 없거나 더 나쁜 경우 I / O 속도가 병목 현상이 될 수 있습니다.
이와 같은 소규모 런타임의 경우 Python 및 Pyomo 버전도 범인이 될 수 있습니다.
프로세스 속도를 높이는 데있어 Python 코드를 프로파일 링하고 코드를 최적화 할 수 있는지 확인하는 것 외에는 일반적인 솔루션이 없습니다. 보고 싶은 것은 (백분율이 아닌) 각 Python 루틴에서 소요되는 시간 (초 )이므로 전체 런타임의 대부분이 소비되는 위치를 도출 할 수 있습니다.
속도를 높이기 위해 시도 할 수있는 한 가지는 Python 다중 처리 도구 상자를 사용하여 이러한 문제의 여러 인스턴스를 병렬로 실행하는 것입니다. 문제가 비슷하기 때문에 좋은 확장을 위해 비동기 코드를 작성하는 것에 대해 걱정할 필요가 없습니다.
면책 조항 : 이것은이 질문에 대한 정확한 답은 아니지만 내가 매우 유용하다고 생각한 정보입니다.
Windows PC (32GB RAM, Windows 10)와 Macbook Pro (4GB RAM, Catalina)에서 동일한 코드를 실행 한 결과 Mac에서 코드가 약 5 배 더 빠르다는 것을 알았습니다. 왜 이런 일이 발생하는지 거의 알지 못하지만 pyomo 파일 처리 때문일 수 있습니다.