최근에 나는 R에서 수행되는 특정 데이터 분석 요구 사항을 충족하기 위해 시스템을 업그레이드하기 위해 다양한 방법으로 Linux 시스템(현재 pop-os)을 설정하고 있습니다. 간단히 말해서, 제가 작업하고 있는 데이터 세트는 생물학적 단일 세포 데이터이고 저는 보통 큰 테이블의 여러 변환 작업을 하고 있습니다. 그리고 R은 유용한 RAM 사용과 적절한 가비지 수집에 최적화되어 있지 않기 때문에 저는 항상 다음과 같은 문제에 직면했습니다. 내가 사용해야 했던 몇 가지 잘 확립된 플러그인을 계산하는 데 필요한 막대한 RAM 오버헤드. 따라서 리소스가 부족한 컴퓨팅으로 이동할 수 있는 옵션이 없고 RAM과 같은 클러스터 요구 사항에 로컬 PC를 사용하고 싶기 때문에 다음을 설정했습니다.
Ryzen 5 3600xt에 2개의 8gig 3600mhz cl19 RAM이 설치되어 있으며 MSI tomahawk b450 max, Windows 및 Linux, 단일 240GB SSD에서 실행됩니다. 이제 2x 16gb 3600mhz cl19 RAM 스틱을 추가로 업그레이드했으며 (흥미롭게도) Linux에서는 50.05GB RAM, Windows에서는 48GB RAM을 얻었습니다. 지금까지 이 설정을 실행하는 데 문제가 없었으며 50GB를 초과하는 일부 작은 오버헤드를 처리하려면 더 많은 RAM이 필요합니다(때로는 단일 함수 가비지 수집 계산 중에 R이 다음 작업을 실행할 때까지 몇 분 동안 ~100GB RAM이 필요함). 주기).
M.2 Gen3 포트에 또 다른 NVMe(Gen 4 1TB)를 설치하고 두 시스템을 모두 해당 드라이브에 다시 설치했습니다. 위에 작성된 설정에서 SWAP를 사용할 때 지연이 발생하고 더 이상 올바르게 계산되지 않기 때문입니다(최대 5%) CPU 사용량은 높지만 MEM이 가득 차서 시스템이 중단됩니다. SWAP이 캐시할 수 없는 오버플로일 수 있습니다.
그래서 기존 240GB SSD를 완전히 대규모 교체로 설정한 상태에서 로컬 PC에서 몇 가지 큰 기능을 다시 실행해 보았는데 RAM이 가득 차도 한동안 합리적으로 작동하는 시스템을 얻을 수 있었지만 성능은 저조했습니다. 여전히 브레이크아웃은 두 번째 블록의 SWAP에서 계산됩니다.
내 SSD 드라이브에 이것이 절대적으로 좋지 않다는 것을 알고 있지만 한 단계 더 나아가 내 NVME에 두 번째 스왑 파티션을 추가했습니다. 여기서 마침내 최첨단 기술이 유용한 곳을 확인할 수 있었습니다. 약 50%의 성능을 얻었습니다. 두 번째 사진은 단지 예시일 뿐입니다.
효율적인 NVMe가 있고 성능이 더욱 향상되는 미래를 상상해 보십시오(예: 내가 읽은 몇 가지 테스트에서 알 수 있듯이 RAID 0은 읽기 속도를 향상시키지 않는 것 같습니다). 그러면 여러 NVMe 스왑 드라이브를 실행하는 것이 캡처에 매우 좋을 수 있습니다. 최적화되지 않은 대용량 RAM 컴파일 또는 모든 데이터가 항상 필요한 것은 아닌 유사한 시나리오의 오버헤드.
이제 내 질문은 다음과 같습니다. 추가 RAM 제한에 도달하면 아직 비어 있는 PCIe 슬롯을 통해 NVMe를 추가로 확장하는 것이 유용할 것이라고 생각하십니까? 아니면 스왑 파일 확장자가 여기서 상상하는 것만큼 강력하지 않고 대부분의 사용자에게 과거의 일이 되어버린 걸까요? 나는 약 2년 동안 Linux를 사용해 왔기 때문에 커널/딥 소프트웨어에 대한 실제 경험이 없으며, 여러분이 알아차리셨을 수도 있는 하드웨어 배경에 대한 경험도 훨씬 적습니다.
나는 이러한 문제에 대해 더 많은 것을 배울 수 있도록 여러분의 의견과 추론을 듣고 싶습니다. 지금까지는 이것이 아직 많은 사용자가 고려하지 않은 틈새 시장이라고 생각하지만 실제로는 많은 잠재력이 있다고 봅니다. 오랫동안 요구되는 계산의 경우 NVME의 마모를 고려하는 서버에서도 RAM 스틱 등에서 항상 사용하는 것보다 효율성이 떨어질 수 있습니다. 아직 완전히 종료되지 않았으면 좋겠습니다. 여기에 질문이 너무 적습니다. 당신의 의견을 기다리겠습니다!
추신: 동일한 컴퓨터에서 실행되는 컴퓨팅 노드의 하드웨어 제약 조건을 최대한 활용하면서 내 컴퓨터에서 작업할 수 있도록 로컬 SLURM 단일 노드 "클러스터"를 실행하는 것도 고려 중이지만 이는 또 다른 질문 주제가 될 것입니다.