슬롯 나라 및 NVIDIA cuOpt를 통한 GPU 가속 최적화

게시일: 2025년 9월 1일 슬롯 나라 해결사

업데이트: 문서는 최근 릴리스 25.10에 추가된 cuOpt 옵션으로 확장되었으며 슬롯 나라/cuOpt 솔버 링크를 반영하기 위해 이제 CUDA 12 및 CUDA 13 모두에서 사용할 수 있습니다.

오랫동안 GPU는 다양한 AI 애플리케이션 및 기타 고성능 컴퓨팅 애플리케이션에 필수적이었지만 수학적 최적화에는 제한적인 영향을 미쳤습니다. 점점 바뀌고 있어요.

논문 “원초-쌍대 하이브리드 기울기를 이용한 실용적인 대규모 선형 계획법” Applegate 등(2021)은 PDLP(원초-이중 선형 프로그래밍) 구현에 대해 상당한 관심을 불러일으켜 실제 문제에 대한 이 방법의 효과를 입증했습니다. 이로 인해 많은 솔버가 GPU 가속 PDLP 구현을 알고리즘 제품에 통합하게 되었으며 NVIDIA 자체 GPU 가속 LP/MIP 및 VRP 솔버의 오픈 소스화로 인해 대중의 관심이 더욱 강화되었습니다.cuOpt .

시간슬롯 나라우리는 에너지 시스템 모델링에서 발생하는 것과 같은 대규모 선형 프로그래밍의 계산 효율성을 향상시키기 위해 최선을 다하고 있습니다. 이러한 약속은 다음과 같은 프로젝트를 통해 입증됩니다.페레그린18127_18197PIPS-IPM++, 블록 구조의 LP에 맞춤화된 병렬 고성능 컴퓨팅(HPC) 가능 내부 점 방법으로, 반복적인 하위 구조가 있는 대규모 문제에서 자연적으로 발생하는 경우가 많습니다. 우리의 지속적인 노력에는 최신 최적화 문제를 효과적으로 해결하기 위해 PDLP를 사용한 GPU 가속 최적화와 같은 최첨단 기술을 탐구하는 것도 포함됩니다.

따라서 우리는 다음을 발표하게 되어 기쁘게 생각합니다.슬롯 나라/cuOpt 링크, NVIDIA와 공동으로 개발되었습니다. 이 제품을 사용하면 cuOpt를 사용하여 슬롯 나라 및 GAMSPy 모델을 해결할 수 있으며 이미 COPT 및 HiGHS를 갖춘 GPU 가속 솔버 컬렉션을 더욱 확장할 수 있습니다(두 가지 모두 GPU 가속 PDLP 구현을 활용하고 COPT에는 GPU 가속 장벽도 있음).

이 블로그 게시물은 광범위한 벤치마킹보다는 슬롯 나라/cuOpt의 실제 적용에 중점을 둡니다. 다음을 해결하는 것을 목표로 합니다.

  • cuOpt는 어떤 모델 유형을 지원합니까
  • 어떤 하드웨어가 필요합니까
  • 슬롯 나라 및 GAMSPy를 통해 cuOpt를 어떻게 활용할 수 있습니까?

cuOpt는 어떤 모델 유형을 지원합니까?

NVIDIA cuOpt는 선형 계획법(LP), 혼합 정수 선형 계획법(MILP) 및 차량 경로 문제(VRP)를 최적화하기 위한 유연한 솔버 방법 및 기능 세트를 제공합니다.1. 이러한 다양성을 통해 사용자는 특정 문제 특성과 원하는 솔루션 품질에 맞게 작업을 조정할 수 있습니다.

cuOpt는 네 가지 LP 방법을 제공합니다. 기본 동시 방법은 PDLP(GPU), Barrier(GPU) 및 Dual Simplex(CPU)를 동시에 실행하여 더 빠른 솔루션을 반환합니다. GPU 기반 PDLP 방식은 대규모 메모리 집약적 LP를 위해 설계되었으며 Barrier 방식으로 메모리가 부족해지는 모델 인스턴스에서 작동할 수 있습니다. Dual Simplex는 특히 고품질 기본 솔루션이 필요한 경우 중소형 LP에 적합한 고전적인 CPU 기반 방법입니다.

MIP의 경우 NVIDIA cuOpt는 하이브리드 GPU/CPU 방식을 사용하여 GPU에서 원초적 휴리스틱을 실행하고 CPU의 이중 경계를 개선합니다.

어떤 하드웨어가 필요합니까?

cuOpt에는 Volta 아키텍처 이상의 NVIDIA GPU가 필요합니다. NVIDIA V100, A100, H100/H200과 같은 강력한 GPU(참조:벤치마크)은 온프레미스에 배포할 수 있지만 슬롯 나라/cuOpt가 원활하게 통합됩니다.슬롯 나라 엔진 SaaSGPU 가속 인프라가 없는 사용자도 이러한 기능에 더 쉽게 액세스할 수 있습니다. 이 클라우드 기반 솔루션은 사용자에게 최적화 문제에 필요한 정확한 하드웨어에 대한 액세스를 제공하므로 상당한 초기 투자가 필요하지 않습니다.

슬롯 나라 및 GAMSPy를 통해 cuOpt를 어떻게 활용할 수 있나요?

슬롯 나라/cuOpt는 로컬에서 실행되도록 설정하거나 슬롯 나라 엔진 SaaS를 통해 클라우드에서 실행할 수 있습니다.

슬롯 나라 및 GAMSPy를 사용하여 로컬에서 cuOpt 설치 및 사용

시작하기 전에 시스템이 다음 시스템 요구사항을 충족하는지 확인하세요.

  • 운영 체제:리눅스
  • 슬롯 나라:버전 49 이상.
  • GAMSPy:버전 1.12.1 이상
  • 엔비디아 GPU:Volta 아키텍처 이상
  • CUDA 런타임 라이브러리:12.8+ 또는 13

설치 단계

  1. 다운로드 및 압축 풀기cuopt-link-release-cu12.zip또는cuopt-link-release-cu13.zip에서최신 GitHub 릴리스:다음 내용의 압축 풀기cuopt-link-release-cu*.zip슬롯 나라 시스템 디렉토리에2. 주의:이것은 기존의 모든 것을 덮어쓰게 됩니다gamsconfig.yaml파일을 해당 디렉토리에 넣으세요. 제공된gamsconfig.yaml포함solverConfig슬롯 나라와 함께 사용하기 위해 cuOpt를 활성화하는 섹션.

  2. 다운로드 및 압축 풀기cu12-runtime.zip또는cu13-runtime.zip에서최신 GitHub 릴리스(필요한 경우):컴퓨터에 CUDA 런타임 라이브러리가 없으면 압축을 풀어주세요cu*_runtime.zip동일한 슬롯 나라 시스템 디렉토리에.

힌트:GAMSPy/cuOpt 예시 노트북이 단계를 자동화하여 즉시 시작할 수 있습니다.

슬롯 나라/cuOpt 및 GAMSPy/cuOpt를 로컬에서 실행

설치 후 cuOpt를 사용하여 슬롯 나라 또는 GAMSPY 모델을 실행할 수 있습니다.


슬롯 나라

로드하고 해결하려면trn스포츠슬롯 나라 모델 라이브러리의 모델, 실행:

gamslib trnsport슬롯 나라 trnsportlp=cuOpt

GAMSPy

GAMSPy와 함께 cuOpt를 사용하려면(예:transport.py예), 해석 함수에서 cuOpt를 솔버로 설정하고 옵션을 설정gamspy.set_options("SOLVER_VALIDATION": 0).

[...]운송.해결(해결자="cuopt")

슬롯 나라 엔진 SaaS를 통해 클라우드에서 cuOpt 실행

로컬 설치의 대안은 슬롯 나라 엔진 SaaS를 통해 cuOpt를 사용하는 것입니다. 이 클라우드 기반 플랫폼은 슬롯 나라 작업 제출을 위한 중앙 집중식 솔루션을 제공합니다. 다음과 같은 다양한 클라이언트 애플리케이션을 지원합니다.슬롯 나라 스튜디오 , 슬롯 나라 MIRO, 그슬롯 나라 엔진 웹 UI, Python 및 기타 언어의 사용자 정의 스크립트. 이러한 유연성을 통해 사용자는 cuOpt를 기존 슬롯 나라 및 GAMSPy 워크플로에 통합할 수 있으며 상당한 온프레미스 GPU 투자가 필요하지 않아 진입 장벽을 낮출 수 있습니다. 사용자는 상당한 초기 자본 지출 없이 필요한 하드웨어 구성에 액세스할 수 있으므로 GPU 가속 최적화의 접근성과 확장성이 향상됩니다.

아직 슬롯 나라/엔진 SaaS 사용자가 아니신가요? 무료 테스트 계정을 요청하세요.sales@슬롯 나라com그리고 슬롯 나라/cuOpt를 사용해 보고 싶다고 팀에 알리세요.

슬롯 나라 Studio를 통해 엔진 SaaS에서 슬롯 나라/cuOpt 실행

슬롯 나라 Studio를 통해 엔진 SaaS에서 슬롯 나라/cuOpt를 실행하는 프로세스는 Studio 내에서 로컬로 슬롯 나라 작업을 실행하는 것과 유사한 사용자 경험을 제공합니다.

힌트:당신은 슬롯 나라 Studio를 사용하는 Windows 또는 Mac 사용자입니까? 괜찮아요. cuOpt는 Linux에서만 사용할 수 있지만 Windows 및 Mac의 슬롯 나라 Studio에서도 슬롯 나라/cuOpt 작업을 제출할 수 있습니다.3

  1. "슬롯 나라 엔진 실행"을 선택합니다. 명령줄 매개변수(아래 설명)를 통해 또는 슬롯 나라 코드 내에 적절한 옵션 문을 포함하여 cuOpt를 LP 솔버로 구성하는 것을 잊지 마세요.
  1. 아직 로그인하지 않으셨다면, 슬롯 나라 엔진 로그인 대화상자가 나타날 것입니다. 로그인을 진행하시려면 원하는 로그인 방법을 선택해주세요.
  1. 작업 제출 대화상자가 나타날 것입니다. 제출할 원하는 네임스페이스와 인스턴스를 선택하세요. 선택적으로 확인을 클릭하기 전에 작업에 태그를 할당합니다.
  1. 당신의 작업은 로컬로 컴파일된 후 실행을 위해 엔진 SaaS에 제출됩니다. 프로세스 로그에서 진행 상황을 모니터링할 수 있습니다. 완료되면 결과와 모든 출력 파일이 다운로드되어 로컬 시스템에서 액세스할 수 있게 됩니다.
--- 작업 indus89.gms 시작 06/23/25 22:07:03 50.1.0 12b75dde WEX-WEI x86 64bit/MS Windows[...]--- 컴파일 시작--- indus89.gms(3485) 4Mb*** 상태: 정상 완료--- 작업 indus89.gms 중지 06/23/25 22:07:03 경과 0:00:00.038추가: indus89.gms (164바이트 보안) (0% 저장됨)추가: indus89.g00 (164바이트 보안) (수축 5%)
--- https://engine.슬롯 나라com:443/api의 슬롯 나라 엔진--- 로그를 indus89-server.lst로 전환토큰: b88ca408-f993-42ff-afe6-972c2ac1fae0
--- 작업 대기 중(80초)--- 작업 indus89.gms 시작 06/23/25 20:10:18 49.6.1 55d34574 LEX-LEG x86 64bit/Linux--- 신청 중:/home/jail/opt/슬롯 나라/gmsprmun.txt/home/jail/opt/슬롯 나라/gamsconfig.yaml--- 슬롯 나라 매개변수가 정의됨LP 큐옵트/home/gfreeman/indus89.g0을 다시 시작하시겠습니까?/home/gfreeman/indus89.gms를 입력하세요[...]--- Solvelink 재설정 = 1--- 행 2,726개 열 6,570개 0이 아닌 값 39,489개--- 범위 통계(0이 아닌 절대 유한 값)--- RHS [최소, 최대] : [ 8.438E-04, 2.170E+04] - 0 값도 관찰됨--- 경계 [최소, 최대] : [ 5.000E-04, 2.713E+03] - 0 값도 관찰됨--- 행렬 [최소, 최대] : [ 4.104E-04, 1.000E+06]--- CUOPT 실행 중(Solvelink=1): 경과 0:00:00.117슬롯 나라/cuOpt 링크는 cuOpt 버전: 25.10.00, git 해시: 99e549ce0d4c67f1383187d719f7fd5a7fed33de에 대해 구축되었습니다.log_file 매개변수를 /home/gfreeman/225a/cuopt.dat로 설정cuOpt 버전: 25.10.0, git 해시: 99e549c, 호스트 아치: x86_64, 장치 아치: 70-real,75-real,80-real,86-real,90a-real,100f-real,120a-real,120CPU: Intel(R) Xeon(R) Platinum 8481C CPU @ 2.70GHz, 스레드(물리적/논리적): 13/26, RAM: 227.96 GiBCUDA 12.9, 장치: NVIDIA H100 80GB HBM3(ID 0), VRAM: 79.11 GiBCUDA 장치 UUID: 3c527f11-4f7e-0effffff95-5758-ffffff
2725 제약 조건, 6569 변수(0 정수) 및 36535 0이 아닌 문제 해결문제 크기 조정:목표 계수 범위: [2e-01, 1e+06]제약 행렬 계수 범위: [4e-04, 1e+04]제약 rhs / 경계 범위: [0e+00, 2e+04]변수 범위 범위: [5e-04, 3e+03]경고: 입력 문제에는 광범위한 계수가 포함되어 있습니다. 수치적 어려움을 피하기 위해 재구성하는 것을 고려하십시오.
타사 사전해결이 비활성화되어 건너뜁니다.목표 오프셋 -0.000000 scale_factor -1.000000동시 실행 중
듀얼 심플렉스는 0.72초 만에 완료, 총 시간 3.62장벽은 3.95초 만에 완성됨Iter Primal Obj.      듀얼 오브제    갭 원시 해상도.  듀얼 해상도   시간0 -0.00000000e+00 -0.00000000e+00 0.00e+00 4.05e+04 2.50e+07 5.511sPDLP 완료동시 시간: 2.609초, 총 시간 5.513초이중 심플렉스로 해결됨상태: 최적 목표: 1.14873646e+05 반복: 6608 시간: 5.513s--- wsisn 모델에 대한 솔루션 읽기[LS2:2523]--- 해결 후 실행 중: 경과 0:01:00.859[LS2:12126]--- GDX 파일 C:\Users\ffian\Documents\슬롯 나라\Studio\workspace\indus89.gdx*** 상태: 정상 완료[LS2:12142]--- 작업 indus89.gms 중지 06/23/25 20:11:19 경과 0:01:00.869아카이브:solver-output.zip팽창: indus89.lst팽창: indus89.lxi--- 추출 중: .\indus89-temp\indus89.gms팽창:solver.log팽창: indus89.gdx팽창: indus89.g00*** 로컬 파일 업데이트됨: indus89.gdx*** 로컬 파일 업데이트됨: indus89-server.lst*** 로컬 파일 업데이트됨: indus89-server.lxi*** 로컬 파일 업데이트됨: indus89-solver.log

엔진 SaaS에서 GAMSPy/cuOpt 실행

해결을 위해 GAMSPy 모델을 엔진 SaaS에 제출하려면 가져오기를 통해 슬롯 나라 엔진 구성을 정의해야 합니다.엔진클라이언트인스턴스를 생성한 후 다음으로 전달할 수 있습니다.해결백엔드가 '엔진'으로 지정된 메소드.

GAMSPy 모델 라이브러리를 적용하려면mexss엔진에서 cuOpt와 함께 사용하려면 일부 수정이 필요합니다.

[...]에서 감스파이 가져오기 (
컨테이너,수식,[...],엔진클라이언트)

[...]
#EngineClient 인스턴스를 생성합니다. 네임스페이스 gpu_tests에 제출하고 NVIDIA GPU가 있는 인스턴스를 선택하세요.
클라이언트=엔진클라이언트(호스트="https://engine.슬롯 나라com/api",
사용자 이름=os.환경["엔진_사용자"],비밀번호=os.환경["엔진_비밀번호"],네임스페이스="gpu_tests",
엔진_옵션={"라벨":"인스턴스=g6.4xlarge"})  

#솔버 큐옵트 및 엔진 백엔드로 해결
mexss.해결(해결사="cuopt", 백엔드="엔진", 클라이언트=클라이언트, 출력=sys.stdout)[...]

터미널 출력은 다음과 같습니다:

(gamspy) PS C:\Users\ffian> & C:/Users/ffian/.conda/envs/gamspy/python.exe c:/Users/ffian/Documents/projects/gamspy-examples/models/mexss/mexss.py[엔진 - 정보] 작업 상태가 대기열에 있습니다...[엔진 - 정보] 작업 상태가 대기열에 있습니다...[엔진 - 정보] 작업 상태가 대기열에 있습니다...--- 작업 __AcZmhoFQyKC4_Jc_7zWpQ.gms 시작 06/30/25 11:36:04 49.6.1 55d34574 LEX-LEG x86 64bit/Linux--- 신청 중:/home/jail/opt/슬롯 나라/gmsprmun.txt/home/jail/opt/슬롯 나라/gamsconfig.yaml--- 슬롯 나라 매개변수가 정의됨LP 큐옵트[...]--- LP 모델 mexss 생성 중--- __AcZmhoFQyKC4_Jc_7zWpQ.gms(459) 4Mb--- Solvelink 재설정 = 1--- 행 74개 열 78개 0이 아닌 값 230개--- 범위 통계(0이 아닌 절대 유한 값)--- RHS [최소, 최대] : [ 5.600E-01, 4.011E+00] - 0 값도 관찰됨--- 경계 [최소, 최대] : [ NA, NA] - 0 값도 관찰됨--- 행렬 [최소, 최대] : [ 1.200E-01, 1.500E+02]--- CUOPT 실행 중(Solvelink=1): 경과 0:00:00.002슬롯 나라/cuOpt 링크는 cuOpt 버전: 25.10.00, git 해시: 99e549ce0d4c67f1383187d719f7fd5a7fed33de에 대해 구축되었습니다.log_file 매개변수를 /home/gfreeman/225a/cuopt.dat로 설정 중cuOpt 버전: 25.10.0, git 해시: 99e549c, 호스트 아치: x86_64, 장치 아치: 70-real,75-real,80-real,86-real,90a-real,100f-real,120a-real,120CPU: Intel(R) Xeon(R) Platinum 8481C CPU @ 2.70GHz, 스레드(물리적/논리적): 13/26, RAM: 228.04 GiBCUDA 12.9, 장치: NVIDIA H100 80GB HBM3(ID 0), VRAM: 79.11 GiBCUDA 장치 UUID: 3c527f11-4f7e-0effffff95-5758-ffffff
제약조건 73개, 변수 77개(정수 0), 0이 아닌 값 225개로 문제 해결문제 크기 조정:목표 계수 범위: [1e+00, 1e+00]제약 행렬 계수 범위: [1e-01, 2e+02]제약 rhs / 경계 범위: [0e+00, 4e+00]변수 범위 범위: [0e+00, 0e+00]
타사 사전해결이 비활성화되어 건너뜁니다.목표 오프셋 0.000000 scale_factor 1.000000동시 실행 중
듀얼 심플렉스는 0.09초 만에 완료, 총 시간 2.81장벽은 2.95초 만에 완성됨Iter Primal Obj.      듀얼 오브제    갭 원시 해상도.  듀얼 해상도   시간0 +0.00000000e+00 +0.00000000e+00 0.00e+00 4.70e+00 2.00e+00 4.621sPDLP 완료동시 시간: 1.901초, 총 시간 4.623초이중 심플렉스로 해결됨상태: 최적 목표: 5.38811204e+02 반복: 56 시간: 4.623s--- 모델 mexss에 대한 솔루션 읽기--- 해결 후 실행 중: 경과 0:00:01.397--- __AcZmhoFQyKC4_Jc_7zWpQ.gms(518) 4Mb--- GDX 파일 /home/gfreeman/__AcZmhoFQyKC4_Jc_7zWpQout.gdx*** 상태: 정상 완료--- 작업 __AcZmhoFQyKC4_Jc_7zWpQ.gms 중지 06/30/25 11:36:06 경과 0:00:01.398[엔진 - 정보] 결과가 작업 디렉터리: C:\Users\ffian\AppData\Local\Temp\tmpizp77f7a로 추출되었습니다.

슬롯 나라/cuOpt 작업 시 주요 고려사항:

cuOpt는 특히 대규모 선형 프로그래밍 문제의 경우 상당한 속도 향상을 제공합니다. 그러나 PDLP와 같은 1차 방법을 활용하여 얻은 솔루션의 정확성에 대한 논의가 있었습니다. 최근웹 세미나, 구로비 공동 창업자 겸 회장에드 로스버그PDLP는 더 빠른 해결 시간을 제공할 수 있지만 내부 점 방법과 비교할 때 고정밀 솔루션을 제공하는 데 어려움을 겪을 수 있다고 언급했습니다.줄리안 홀이 내용을 다음에서 확장했습니다.HiGHS 뉴스레터 25.0에서 그는 cuPDLP-C와 HiGHS 내부 점 솔버 간의 실험적 비교를 제시했습니다. 그의 연구 결과에 따르면 PDLP는 여러 사례에서 더 빨랐지만 일부 솔루션은 실제 최적성에서 눈에 띄는 편차를 보였습니다.

이러한 관찰은 중요한 절충점을 강조합니다. 1차 방법은 특히 매우 큰 모델의 경우 상당한 속도 향상을 제공할 수 있지만 사용자는 사용 사례에 필요한 정확도 수준과 비교하여 이를 평가해야 합니다. 솔버를 선택할 때 정보에 입각한 결정을 내리려면 이러한 장단점을 이해하고 솔버와 알고리즘을 신중하게 사용하는 것이 필수적입니다. 슬롯 나라/cuOpt를 이미 사용 중인 솔버와 주의 깊게 비교하는 것은 현명한 조치가 될 수 있습니다. 다음 섹션에서는 cuOpt가 해결할 수 있는 슬롯 나라 모델 유형을 간략하게 설명하고, 슬롯 나라/cuOpt가 제공하는 솔버 옵션을 살펴보고, 슬롯 나라 도구가 어떻게 사용되는지 보여드리겠습니다.심사관솔루션 품질에 대한 결론을 도출하는 데 효과적으로 사용될 수 있습니다.

지원되는 문제 유형 및 제한사항

cuOpt는 다음 슬롯 나라 문제 유형을 해결할 수 있습니다.

  • lp(선형 프로그래밍)
  • MIP(혼합 정수 프로그래밍)
  • RMIP(완벽한 혼합 정수 계획법)

이산 변수에 대한 참고 사항:이산형 변수의 유형은 다음으로 제한됩니다.바이너리 및 정수.

cuOpt 매개변수

슬롯 나라/cuOpt 옵션은 다음을 통해 설정할 수 있습니다.슬롯 나라 솔버 옵션 파일. 여기에는 다양한 슬롯 나라/cuOpt 옵션이 카테고리별로 나열되어 있으며 각 옵션에 대한 기능을 나타내는 몇 가지 단어가 있습니다.

사용 가능한 매개변수에 대한 자세한 문서는 공식 문서에 문의하세요.NVIDIA cuOpt 사용자 가이드 .4


일반 옵션:

옵션 설명 유형 기본값
num_cpu_threads LP 및 MIP 솔버에 사용되는 CPU 스레드 수를 제어합니다(기본 슬롯 나라 스레드) 정수 0
presolve 사전 해결 활성화 여부를 제어합니다. Presolve는 문제 크기를 줄이고 해결 시간을 단축할 수 있습니다. MIP의 경우 기본적으로 활성화되고 LP의 경우 기본적으로 비활성화됩니다. 부울 0(LP) 1(MIP)
dual_postsolve 이중 사후 해결 활성화 여부를 제어합니다. LP에만 해당됩니다. 부울 1 (사전 해결 포함 LP) 0
prob_read MPS 파일에서 문제를 읽습니다. MPS 파일을 통해 인스턴스가 제공되면 솔루션이 슬롯 나라에 다시 보고되지 않습니다. 문자열
time_limit 솔버가 중지되고 현재 솔루션을 반환하는 시간 제한을 초 단위로 제어합니다(기본값 슬롯 나라 ResLim) 정수 0

선형 프로그래밍 옵션:

옵션 설명 유형 기본값
absolute_dual_tolerance PDLP의 이중 타당성 검사에 사용되는 절대 이중 허용오차를 제어합니다. 더블 0.0001
absolute_gap_tolerance PDLP의 이중성 간격 검사에 사용되는 절대 간격 허용 오차를 제어합니다. 더블 0.0001
absolute_primal_tolerance 원원 타당성 검사에 사용되는 절대 원원 허용오차를 제어합니다. 더블 0.0001
크로스오버 최적의 솔루션을 찾은 후 PDLP가 기본 솔루션으로 크로스오버해야 하는지 여부를 제어합니다. 부울 0
first_primal_feasible 첫 번째 원초 실현 가능 솔루션이 발견될 때 PDLP를 중지해야 하는지 여부를 제어 부울 0
불가능성_감지 PDLP가 실행 불가능성을 감지해야 하는지 여부를 제어합니다. 부울 0
iteration_limit 솔버가 중지되고 현재 솔루션을 반환하는 반복 제한을 제어합니다(기본값 슬롯 나라 IterLim) 정수 맥신트
방법 선형 계획법 문제를 해결하는 방법을 제어
  • 0: 동시
  • 1: PDLP
  • 2: 이중 심플렉스
  • 3: 장벽
enumint 0
pdlp_solver_mode PDLP가 작동해야 하는 모드를 제어합니다.
  • 0: 안정1
  • 1: 안정2
  • 2: 체계적1
  • 3: 빠르게1
  • 4: 안정 3
enumint 4
per_constraint_residual PDLP가 전역이 아닌 제약조건별로 원시 및 이중 잔차를 계산해야 하는지 여부를 제어합니다. 부울 0
relative_dual_tolerance PDLP의 이중 타당성 검사에 사용되는 상대적 이중 허용오차를 제어합니다. 더블 0.0001
relative_gap_tolerance PDLP의 이중성 갭 검사에 사용되는 상대적 갭 허용오차를 제어합니다. 더블 0.0001
relative_primal_tolerance PDLP의 원시 타당성 검사에 사용되는 상대 원시 허용오차를 제어 더블 0.0001
save_best_primal_so_far PDLP가 지금까지 최고의 원시 솔루션을 저장해야 하는지 여부를 제어합니다. 부울 0
strict_infeasibility PDLP에서 엄격한 실행 불가능 모드 제어 부울 0

장벽 해결 옵션:

옵션 설명 유형 기본값
접는 선형 프로그램을 접을지 여부를 제어합니다.
  • -1: cuOpt가 결정
  • 0: 접기 비활성화
  • 1: 강제 접기
enumint -1
이중화 사전 해결에서 선형 계획을 이중화할지 여부를 제어
  • -1: cuOpt가 결정
  • 0: 이중화 비활성화
  • 1: 강제 이중화
enumint -1
주문 희소 인수분해를 위해 cuDSS에서 사용하는 정렬 알고리즘을 제어
  • -1: cuOpt가 결정
  • 0: cuDSS 기본 순서
  • 1: AMD(대략 최소 등급) 주문
enumint -1
증강됨 장벽 방법에서 어떤 선형 시스템을 풀 것인지 제어합니다.
  • -1: cuOpt가 결정
  • 0: ADAT 시스템 풀기(정규 방정식)
  • 1: 증강 시스템 해결
enumint -1
eliminate_dense_columns 해결하기 전에 제약조건 행렬에서 조밀한 열을 제거할지 여부를 제어합니다. 부울 사실
cudss_deterministic cuDSS가 결정적 모드에서 작동하는지 여부를 제어합니다. 부울 거짓
barrier_dual_initial_point 장벽 솔버의 이중 초기점을 계산하는 데 사용되는 방법을 제어
  • -1: cuOpt가 결정
  • 0: Lustig, Martsten, Shanno가 쓴 "선형 프로그래밍을 위한 Mehrotra의 예측자-수정자 Interior-Point 방법 구현"(SIAM J. Optimization, 1992) 논문을 기반으로 하는 경험적 접근 방식의 초기점을 사용합니다.
  • 1: 쌍대 변수의 노름을 최소화하고 비용을 줄이면서 쌍대 등식 제약 조건을 만족시키는 최소 제곱 문제 해결의 초기점을 사용
enumint -1

혼합 정수 선형 계획법 옵션:

옵션 설명 유형 기본값
mip_absolute_gap MIP 해결을 종료하는 데 사용되는 절대 허용오차를 제어합니다(기본 슬롯 나라 OptCA) 더블 1.00E-10
mip_absolute_tolerance MIP 절대 허용오차를 제어 더블 0.0001
mip_heuristics_only GPU 휴리스틱만 실행해야 하는지 제어 부울 0
mip_integrality_tolerance MIP 무결성 허용오차 제어 더블 1.00E-05
mip_relative_gap MIP 해결을 종료하는 데 사용되는 상대 허용오차를 제어합니다(기본 슬롯 나라 OptCR) 더블 1.00E-05
mip_relative_tolerance MIP 상대 허용오차를 제어 더블 0.0001
mip_scaling MIP 문제에 스케일링을 적용해야 하는지 제어 부울 1

솔루션 품질

모든 문제 유형에 대해 보편적으로 최적인 단일 알고리즘은 없습니다. cuOpt 내에서 PDLP는 명시적 행렬 분해를 방지할 수 있는 기능으로 인해 대규모 메모리 집약적 문제에 매우 적합합니다. 이와 대조적으로 Dual Simplex는 고품질 기본 솔루션을 제공할 수 있는 중소 규모 문제에 더 적합합니다.

사용자는 사용 가능한 다양한 옵션 덕분에 특정 문제 특성과 원하는 솔루션 품질을 기반으로 작업을 사용자 정의할 수 있습니다.슬롯 나라/심사관솔루션 품질에 대한 편견 없는 평가를 제공하고 원문제 타당성, 쌍대 타당성 및 최적성을 확인하여 솔버가 보고한 최적 솔루션의 유효성을 확인함으로써 사용자를 더욱 돕습니다.

슬롯 나라/Examiner는 "솔버처럼" 사용되며 슬롯 나라 및 GAMSPy와 함께 사용 가능한 모든 솔버를 하위 솔버로 사용하도록 매개변수화될 수 있습니다.

cuOpt를 하위 솔버로 사용하여 Examiner 실행

심사관 옵션하위 해결사그리고subsolverop하위 해결사를 지정하고 해당 옵션 파일을 활성화할 수 있습니다. Examiner 예에서는 cuOpt 옵션을 활용합니다.방법 1그리고교차 0.

다음 코드 조각은 슬롯 나라와 GAMSPy 모두에서 이러한 솔버 옵션을 설정하는 한 가지 방법을 보여줍니다.


슬롯 나라

[...]* 슬롯 나라/Examiner 옵션 파일 Examiner.opt를 작성하고 슬롯 나라/cuOpt 옵션 파일과 함께 cuOpt를 하위 솔버로 사용하도록 지시*파일 opt_examiner / Examiner.opt /;putclose opt_examiner 'subsolver cuopt' /'하위 솔버옵트 1' ;
* 슬롯 나라/cuOpt 옵션 파일 cuopt.opt를 작성하고 사용하도록 지시** 크로스오버가 없는 PDLP*파일 opt_cuopt / cuopt.opt /;putclose opt_cuopt '방법 1' /'크로스오버 0' ;
옵션 솔버 =examiner, optFile=1;lp를 사용하여 myObjective를 최대화하는 myModel을 해결합니다.[...]

GAMSPy

[...]#컨테이너의 작업 디렉터리에 cuOpt 옵션 파일 쓰기
myContainer.writeSolverOptions("cuopt", {"방법":1, "크로스오버":0})
#검사관을 솔버로 설정하고 검사관 옵션 정의
내모델.해결(해결자="심사관",solver_options={"하위 해결사":"cuopt", "서브솔버옵트":"1"})[...]

문제를 해결할 때indus8965888_66367

[...]상태: 최적 목표: 1.15093789e+05 반복: 673080 시간: 42.146sSubsolver cuopt는 modstat 1, solstat 1을 반환합니다.

SolvPoint - 솔버 제공 수준 및 한계:크기 범위(관찰되었지만 적용되지 않음): [1,999999]최대 요소: row=objn, col=artwater(nwfp,fresh,jan): Aij = 999999원시 변수 경계가 충족됨 (tol = 1e-06)이중 변수 경계가 충족됨 (tol = 1e-06)원초 실행 불가능 w.r.t. 제약 조건(tol = 1e-06):최대 위반: watalcz.l(srws,saline,sep): 0 <= 1.70757 <= 02-위반 기준: 5.54794이중 제약 조건 충족(tol = 1e-06)원시 CS는 0이 아닙니다(tol = 1e-07):최대 위반: canaldiv.l(44-ful,apr): 0.1021 <= 0.106234 <= 0.894canaldiv.m(44-ful,apr): -INF <= 2.561 <= +INF이중 CS는 0이 아닙니다(tol = 1e-07):최대 위반: watalcz.m(srws,saline,sep): -INF <= 0.00933685 <= +INFwatalcz.l(srws,식염수,9월): 0 <= 1.70757 <= 0모델 속성 OK (tol = 1e-06)

예상한 대로 반환된 원초 솔루션은 심각한 제약 조건 위반을 나타냅니다(최대 위반 1.70757 및 2-Norm of 위반 5.54794). 이것이 허용될 수 없는 경우 완화 전략은 예를 들어 슬롯 나라/cuOpt 옵션 'relative_primal_tolerance 1e-6'(기본값 1e-4)을 설정하여 상대 원시 허용오차를 줄이거나 슬롯 나라/cuOpt 옵션 'crossover 1'을 설정하여 교차를 활성화하는 것일 수 있습니다.

함께relative_primal_tolerance 1e-6심사관이 돌아옴

[...]상태: 최적 목표: 1.14889661e+05 반복: 898280 시간: 61.183sSubsolver cuopt는 modstat 1, solstat 1을 반환합니다.

SolvPoint - 솔버 제공 수준 및 한계:크기 범위(관찰되었지만 적용되지 않음): [1,999999]최대 요소: row=objn, col=artwater(nwfp,fresh,jan): Aij = 999999원시 변수 경계가 충족됨 (tol = 1e-06)이중 변수 범위가 충족됨(tol = 1e-06)원초 실행 불가능 w.r.t. 제약 조건(tol = 1e-06):최대 위반: demnat.l(prw,buff-milk): 0 <= -0.057 <= 1e+2992-위반 표준: 0.0958988이중 제약조건 충족됨 (tol = 1e-06)원시 CS는 0이 아닙니다(tol = 1e-07):최대 위반: x.l(psw,saline,sc-mill,bulock,standard,standard): 0 <= 216.779 <= +INFx.m(psw,saline,sc-mill,bulock,standard,standard): -INF <= -0.158928 <= 0이중 CS는 0이 아닙니다(tol = 1e-07):최대 위반: demnat.m(prw,basmati): -INF <= -2.4166 <= 0demnat.l(prw,basmati): 0 <= 0.0619937 <= +INF모델 속성 OK (tol = 1e-06)

예상한 대로 허용 오차가 엄격할수록 위반은 줄어들지만 실행 시간은 길어지는 것을 볼 수 있습니다.

'크로스오버 1'을 사용하면 모든 위반 사항이 사라지고 Examiner가 반환됩니다.

[...]교차 시간 0.36초총 시간 42.69초교차 상태 최적Subsolver cuopt는 modstat 1, solstat 1을 반환합니다.

SolvPoint - 솔버 제공 수준 및 한계:규모 범위(관찰되었지만 적용되지 않음): [1,999999]최대 요소: row=objn, col=artwater(nwfp,fresh,jan): Aij = 999999원시 변수 경계가 충족됨 (tol = 1e-06)이중 변수 경계가 충족됨 (tol = 1e-06)원초 제약조건 충족됨 (tol = 1e-06)이중 제약 조건 충족 (tol = 1e-06)원시 CS는 0입니다(tol = 1e-07)이중 CS는 0입니다(tol = 1e-07)모델 속성 OK (tol = 1e-06)

참고:모든 실험은 AWS EC에서 수행되었습니다.g6.4xlarge73404_73738

결론

새로운슬롯 나라/cuOpt 링크사용자가 통합할 수 있도록 지원cuOpt기존 슬롯 나라 및 GAMSPy 모델에 직접 적용됩니다. 로컬 설치를 통해서든 확장성을 통해서든슬롯 나라 엔진 SaaS클라우드 솔루션을 통해 사용자는 대규모 온프레미스 GPU 투자 부담 없이 최첨단 GPU 성능을 활용할 수 있습니다.

결정적으로 Examiner와 같은 슬롯 나라의 강력한 진단 도구는 이 프로세스에 필수적이며 솔루션 타당성과 품질에 대한 필수 점검을 제공합니다. 이를 통해 GPU 가속의 이점이 실제 애플리케이션에 필요한 정밀도로 보완됩니다.

가장 까다로운 최적화 작업을 위해 슬롯 나라 및 GAMSPy를 통해 cuOpt의 잠재력을 탐색해 보시기 바랍니다. 슬롯 나라 엔진 SaaS에서 cuOpt(또는 다른 솔버)를 시작하려면 다음 연락처로 무료 테스트 계정을 요청하세요.sales@슬롯 나라com .

귀하의 피드백과 경험은 우리가 대규모 의사 결정을 계속 발전시키는 데 매우 중요합니다. 문의해 주세요.support@슬롯 나라com또는 가입forum.슬롯 나라com공유하고 싶은 질문, 문제 또는 성공 사례가 있으면 알려주세요.


  1. cuOpt VRP 솔버는 슬롯 나라 및 GAMSPy를 통해 사용할 수 없습니다. ↩︎

  2. 실행gamspy 쇼 베이스GAMSPy용 슬롯 나라 시스템 디렉토리를 식별합니다. ↩︎

  3. 51.2.0 이전 슬롯 나라 버전의 경우 gamsconfig.yaml 파일에 "더미"solverConfig 섹션을 추가하십시오.

    [...]  
    
    솔버 구성:  
       - 큐옵트:  
         최소 버전: 49  
         스크립트 이름: 더미  
         실행 파일 이름: 더미  
         모델 유형:  
           - LP  
           - 밉  
           -RMIP
     ↩︎
  4. 슬롯 나라/cuOpt 옵션은 원래 매개변수 이름에서 "CUOPT_" 접두어를 생략합니다. 예를 들어, cuOpt 문서의 "CUOPT_METHOD"는 슬롯 나라/cuOpt 솔버 옵션 파일에서 단순히 '방법'이 됩니다. ↩︎