Hyper-V로 만든 가상머신을 RDP로 뿌리기 (1)

김우현·2024년 11월 9일
1
post-thumbnail

음, 현재 개인적으로 꽤나 큰 컴퓨터를 이용하고 있네요. 혼자서 쓰기엔 너무나 과분한 사양이므로, 이를 뜯어서 여럿이서 사용할 수 있게 만들어 볼까 합니다.
한글로 한번에 써진 문서가 없는 것 같아 제가 아는 바를 바탕으로 써보고 있습니다.

  • GPU-P와 DDA의 차이점

  • GPU-P: 하나의 GPU를 여러 가상 머신이 공유하여 사용.

  • DDA(Discrete Device Assignment): 하나의 GPU를 단일 가상 머신에 직접 할당.
    -> 다음번엔 이걸 다뤄보겠읍니다.

  • 지원 운영 체제

    • 호스트와 가상 머신 모두 Windows 10 버전 1809 이상 또는 Windows Server 2019 이상이어야 합니다.

목차

1.Hyper-V GPU 파티셔닝을 통한 가상머신 만들기

2.RDP 셋팅, 60fps과 로컬그룹정책 편집을 통한 성능 개선 추구

참고로 필자도, 테스트 중인 사항이 있어 천천히 개선해볼 생각입니다. 도움주실 수 있으면 감사히 받겠습니다.

일반적인 사양이면, 위 행동을 통하여 효율성 증대를 추구하기 어려울 수도 있습니다.

1. Hyper-V 제작하기

Hyper-V 가상머신을 제작하는 방법은 대략 두 가지가 있습니다.

  • Easy-GPU-PV-main 을 통하여 원클릭으로 뽑기
  • manual하게 제작해보기

첫번째로 원클릭으로 뽑아보고, 귀찮게 제작하는 방법 두가지를 해보겠습니다.

Easy-GPU-PV 통해서 딸깍하기?

Enhanced-GPU-PV로 Hyper-V에서 GPU 가상화 쉽게 사용하기

Hyper-V에서 GPU 가상화를 보다 쉽게 구현할 수 있도록 도와주는 Enhanced-GPU-PV 프로젝트를 소개합니다. 이 프로젝트는 기존의 "Easy-GPU-PV"를 기반으로 개선되었으며, 이제 Sunshine과 Virtual Display Driver까지 지원합니다!

📌 소개

GPU-PV는 시스템의 전용 또는 통합 GPU를 분할하여 여러 Hyper-V 가상 머신에 할당할 수 있게 해주는 기술입니다. 이는 WSL2와 Windows Sandbox에서 사용되는 기술과 동일합니다. Enhanced-GPU-PV는 이 과정을 자동화하여 GPU-PV VM을 더욱 쉽게 설정할 수 있도록 도와줍니다.

주요 기능 및 개선 사항

  • Sunshine 또는 Parsec 설치 선택 가능: 사용자 취향에 따라 원하는 원격 데스크톱 애플리케이션을 선택하여 설치할 수 있습니다.
  • 영구적인 가상 디스플레이 추가: Parsec 앱에 의존하지 않고도 VM에 항상 연결된 가상 디스플레이를 추가하여 화면 연결 문제를 해결했습니다.
  • 다양한 가상 디스플레이 솔루션 제공: Parsec Virtual Display Driver 또는 수정된 itsmikethetech의 Virtual Display Driver 중 선택 가능합니다.
  • 기타 개선 사항:
    • OneDrive 자동 시작 비활성화
    • 설치 시 언어 및 시간대 설정 가능
    • 디스플레이 끄기 시간을 "안 함"으로 설정

🛠️ 사전 요구 사항

  • 운영 체제: Windows 10 20H1 이상 또는 Windows 11 Pro, Enterprise, Education 버전 (호스트 및 VM의 Windows 버전 일치 권장)
  • GPU: NVIDIA/AMD 전용 GPU 또는 Intel 통합 GPU (하드웨어 비디오 인코딩 지원 필요)
  • 최신 GPU 드라이버: 제조사 공식 웹사이트에서 다운로드
  • Windows ISO 파일: 여기 또는 여기에서 다운로드 (Media Creation Tool 사용 금지)
  • Hyper-V 활성화: BIOS에서 가상화 기술 활성화 및 Windows에서 Hyper-V 완전히 활성화
  • PowerShell 스크립트 실행 권한: 관리자 권한으로 PowerShell에서 Set-ExecutionPolicy unrestricted 실행
  • 인터넷 연결: VM 첫 부팅 시 Parsec, Virtual Display, 오디오 드라이버 설치를 위해 필요

🚀 설치 및 실행 방법

  1. 시스템 확인: 사전 요구 사항을 모두 충족하는지 확인합니다.
  2. 프로젝트 다운로드: 최신 릴리스 다운로드 후 압축 해제합니다.
  3. PowerShell ISE 실행: 관리자 권한으로 PowerShell ISE를 실행합니다.
  4. PreChecks.ps1 실행: PreChecks.ps1 파일을 열고 실행하여 GPU 목록 또는 수정해야 할 경고 메시지를 확인합니다.
  5. CopyFilesToVM.ps1 설정:
    • CopyFilesToVM.ps1 파일을 열고 상단의 params 섹션을 편집합니다.
    • 주요 설정 사항은 아래를 참고하세요.
  6. 스크립트 실행: 수정한 CopyFilesToVM.ps1 스크립트를 실행합니다. (약 5~10분 소요)
  7. VM에서 Parsec 또는 Sunshine 로그인:
    • 선택한 애플리케이션에 로그인합니다.
    • Sunshine을 선택한 경우 클라이언트와 페어링합니다.
  8. 가상 디스플레이 전환:
    • 데스크톱의 "Switch Display to ParsecVDA/Virtual Display" 바로 가기를 더블 클릭합니다.
    • VM 내부의 마우스 커서가 사라집니다.
    • 호스트의 창을 닫습니다.
    • Parsec 또는 Moonlight를 사용하여 VM에 연결합니다.
  9. 완료: 이제 Enhanced-GPU-PV를 사용할 준비가 되었습니다!

⚠️ 참고 사항

  • 첫 연결 후 VM 재시작 권장: Sunshine/Moonlight를 사용하는 경우, 첫 연결 후 VM을 재시작하면 성능이 향상됩니다.
  • 연결 지연: VM 연결에는 최대 60초가 소요될 수 있습니다. Moonlight의 기본 타임아웃 시간은 10초이므로 연결 실패 시 여러 번 시도해야 할 수 있습니다. 이를 해결하기 위해 타임아웃을 늘린 수정된 Moonlight 클라이언트를 사용할 수 있습니다.
  • GPU 드라이버 업데이트: 호스트의 GPU 드라이버를 업데이트한 후 VM의 GPU 드라이버도 업데이트해야 합니다.
    • VM 종료 및 호스트 재부팅
    • PowerShell에서 Update-VMGpuPartitionDriver.ps1 -VMName "VM이름" -GPUName "GPU이름" 실행

🔧 CopyFilesToVM.ps1 설정 값 설명

  • VMName: VM의 이름 및 호스트네임 (예: "GPUP")
  • SourcePath: Windows 10/11 ISO 파일의 경로 (예: "C:\Users\username\Downloads\Win11_Korean_x64.iso")
  • Edition: 설치할 Windows 에디션 (Pro 버전은 6)
  • SizeBytes: 디스크 크기 (최소 20GB, 예: 40GB)
  • MemoryAmount: 메모리 크기 (예: 8GB)
  • CPUCores: 할당할 CPU 코어 수 (예: 4)
  • NetworkSwitch: Hyper-V의 네트워크 스위치 이름 (예: "Default Switch")
  • VHDPath: VM 디스크를 저장할 경로 (예: "C:\Hyper-V\Virtual Hard Disks\")
  • GPUName: 사용할 GPU 이름 ("AUTO"로 설정하면 첫 번째 GPU 자동 선택)
  • GPUResourceAllocationPercentage: VM에 할당할 GPU 비율 (예: 50)
  • Parsec: Parsec 설치 여부 ($true 또는 $false)
  • ParsecVDA: Parsec Virtual Display 설치 여부 ($true 또는 $false)
  • Sunshine: Sunshine 설치 여부 ($true 또는 $false)
  • VirtualDisplayDriver: Virtual Display Driver 설치 여부 ($true 또는 $false)
  • Username: VM의 Windows 사용자 이름 (예: "GPUVM", 특수 문자 사용 금지)
  • Password: VM의 Windows 비밀번호 (공백 불가, 예: "YourPassword123!")
  • Autologon: 자동 로그인 설정 ("true" 또는 "false")
  • Language: 언어 설정 (예: "ko-KR", 기본값 사용 시 ""로 두기)
  • Timezone: 시간대 설정 (예: "Korea Standard Time", 기본값 사용 시 ""로 두기)

💡 추가 정보

  • VM 연결 시 Parsec 또는 Moonlight 사용: VM에 접속할 때는 항상 선택한 원격 데스크톱 애플리케이션을 사용하세요.
  • 가상 디스플레이 솔루션 사용: 호스트에서 모니터를 연결하지 않고도 VM을 사용할 수 있습니다.
  • 오류 해결:
    • "ERROR : Cannot bind argument to parameter 'Path' because it is null." 오류가 발생하면, Media Creation Tool로 다운로드한 ISO를 사용한 것일 수 있습니다. 이 경우 직접 ISO 파일을 다운로드해야 합니다.
  • 호스트 GPU 드라이버: 장치 관리자에서 GPU가 Microsoft 드라이버로 표시될 수 있으나, 노란색 경고 삼각형이 없다면 정상입니다.
  • OneDrive 비활성화: 로컬 계정을 사용하므로 OneDrive 자동 시작을 비활성화했습니다.
  • 디스플레이 문제: UAC 프롬프트나 전체 화면 전환 시 최대 60초 동안 화면이 검게 변할 수 있습니다.

📝 마무리

Enhanced-GPU-PV를 통해 Hyper-V에서 GPU 가상화를 보다 쉽게 설정하고 활용할 수 있습니다. 위의 가이드에 따라 설치 및 설정을 진행해보세요. 원활한 가상 머신 환경에서 Parsec 또는 Moonlight를 활용하여 고성능의 원격 데스크톱 경험을 즐기시기 바랍니다.

Manual하게 제작해보기

구현 방법 요약

  • GPU 지원 여부 확인: 사용 중인 GPU가 GPU-P 기능을 지원하는지 확인해야 합니다.
    가끔 일부 RX시리즈들 지원 안하더군요.
  1. 가상 머신 생성

    • Hyper-V 관리자에서 새로운 가상 머신을 생성합니다.
    • 운영 체제는 Windows 10, Windows 11 또는 Windows Server 2019 이상 준비해야 합니다.
    • 또한 동적 메모리 기능을 허용해선 안됩니다.
  2. GPU-P 기능 설정

    • PowerShell을 관리자 권한으로 실행합니다.
    • 가상 머신에 GPU 파티셔닝 어댑터를 추가합니다:
      $vm = "가상머신이름"
      Remove-VMGpuPartitionAdapter -VMName $vm -ErrorAction SilentlyContinue
      Add-VMGpuPartitionAdapter -VMName $vm
    • GPU 자원 할당을 설정합니다:
      Set-VMGpuPartitionAdapter -VMName $vm -MinPartitionVRAM 1 #1G
      Set-VMGpuPartitionAdapter -VMName $vm -MaxPartitionVRAM 4 #4G
      Set-VMGpuPartitionAdapter -VMName $vm -OptimalPartitionVRAM 2 #2G 
      Set-VMGpuPartitionAdapter -VMName $vm -MinPartitionEncode 1
      Set-VMGpuPartitionAdapter -VMName $vm -MaxPartitionEncode 11
      Set-VMGpuPartitionAdapter -VMName $vm -OptimalPartitionEncode 10
      Set-VMGpuPartitionAdapter -VMName $vm -MinPartitionDecode 1
      Set-VMGpuPartitionAdapter -VMName $vm -MaxPartitionDecode 11
      Set-VMGpuPartitionAdapter -VMName $vm -OptimalPartitionDecode 10
      Set-VMGpuPartitionAdapter -VMName $vm -MinPartitionCompute 1
      Set-VMGpuPartitionAdapter -VMName $vm -MaxPartitionCompute 11
      Set-VMGpuPartitionAdapter -VMName $vm -OptimalPartitionCompute 10
  • 가상 머신의 메모리 맵 IO 공간을 설정합니다:
    Set-VM -GuestControlledCacheTypes $true -VMName $vm
    Set-VM -LowMemoryMappedIoSpace 1GB -VMName $vm
    Set-VM -HighMemoryMappedIoSpace 32GB -VMName $vm
  • 설정을 적용하기 위해 가상 머신을 재시작합니다:
    Restart-VM -Name $vm
  1. 가상 머신 내에서 GPU 드라이버 설치

    • 가상 머신에 접속하여 GPU 드라이버를 설치합니다.
    1. 호스트 컴퓨터의 C:\Windows\System32\DriverStore\FileRepository 폴더에서 nvdispi.inf_amd64 폴더를 찾아 줍니다.
      //UNIQUEID 는 컴퓨터마다 다름
      //드라이버 버전에 따라 nvdispi.inf_amd64가 아니라 nvdispig.inf_amd64일 수도 있음. 정확히 확인은 안해봤으나, 500번대 기준으로 달라지는 것으로 추정.

    2. 게스트 컴퓨터의 C:\Windows\System32\HostDriverStore\FileRepository\에 복사해줍니다.
      (해당 디렉토리가 존재하지 않는 경우 직접 생성해서 작업합니다.)

    3. 호스트 컴퓨터의
      c:\Windows\System32\에 있는 nvapi64.dll(드라이버)를 게스트 컴퓨터의 C:\Windows\System32로 복사합니다.

    4. 게스트 컴퓨터 재부팅 후 작동여부를 확인합니다.

<출처> https://m.blog.naver.com/idh3601/222520214248

  1. 원격 데스크톱 설정

    • 가상 머신에서 원격 데스크톱을 활성화합니다:
      • 제어판 > 시스템 > 원격 설정 > 원격 데스크톱 허용
    • 방화벽 설정에서 RDP 포트(기본 3389)를 허용합니다.
  2. 외부 접속 환경 구성

    • 공인 IP를 가상 머신에 할당하거나 포트 포워딩을 설정하여 외부에서 접근 가능하게 합니다.
    • VPN을 구성하여 보안을 강화할 수 있습니다.

복수 GPU 사용 시 대응 방안

여러 개의 GPU를 사용하는 시스템에서 특정 GPU를 가상 머신에 할당하려면 다음 단계를 따르세요.

1. 할당 가능한 GPU-P 자원 확인

시스템에서 GPU-P를 지원하는 모든 GPU 목록과 각 GPU의 인스턴스 경로를 확인합니다.

# 할당 가능한 GPU-P 자원 확인
Get-VMHostPartitionableGpu

이 명령어는 시스템에 연결된 GPU의 InstancePath와 기타 정보를 제공합니다.

2. 특정 GPU의 인스턴스 경로 확인

가상 머신에 할당하려는 GPU의 InstancePath를 확인합니다. 출력된 목록에서 원하는 GPU의 InstancePath를 식별합니다.

3. 가상 머신에 특정 GPU 추가

Add-VMGpuPartitionAdapter 명령어를 사용할 때 -InstancePath 매개변수를 사용하여 특정 GPU를 지정합니다.

# GPU-P를 VM에 추가 (특정 GPU 지정)
Add-VMGpuPartitionAdapter -VMName "VM_Name" -InstancePath "GPU_Instance_Path"
  • "GPU_Instance_Path"는 앞서 확인한 GPU의 InstancePath를 입력합니다.
  • 주의: InstancePath 값은 시스템마다 다르므로 반드시 본인의 시스템에서 확인한 값을 사용해야 합니다.

예시:

Add-VMGpuPartitionAdapter -VMName "VM_Name" -InstancePath "\\?\PCI#VEN_10DE&DEV_2206&SUBSYS_220610DE&REV_A1#4&1d81e16&0&0019#{064092b3-625e-43bf-9eb5-dc845897dd59}\GPUPARAV"

4. GPU 리소스 설정

앞서 설명한 것처럼 Set-VMGpuPartitionAdapter 명령어를 사용하여 GPU 자원의 세부 설정을 조정합니다.

# GPU 리소스 할당량 설정
Set-VMGpuPartitionAdapter -VMName "VM_Name" -MinPartitionVRAM 1GB -MaxPartitionVRAM 2GB

5. 가상 머신에 설치된 GPU 확인

가상 머신에 할당된 GPU를 확인하여 올바르게 설정되었는지 검증합니다.

# VM에 할당된 GPU 정보 확인
Get-VMGpuPartitionAdapter -VMName "VM_Name"

이 명령어는 가상 머신에 연결된 GPU의 세부 정보를 제공합니다.

설정 테스트

가상 머신에서 GPU가 제대로 작동하는지 확인합니다.

  1. VM에 로그인:

    • 가상 머신에 접속하여 운영 체제에 로그인합니다.
  2. GPU 드라이버 설치:

    • VM 내에서 GPU 제조업체의 드라이버를 설치합니다.
  3. GPU 인식 확인:

    • 장치 관리자에서 디스플레이 어댑터를 확인하여 GPU가 인식되었는지 확인합니다.
    • DirectX 진단 도구 실행:
      • Win + R 키를 누르고 dxdiag를 입력하여 실행합니다.
      • 디스플레이 탭에서 GPU 정보 확인

원격 데스크톱에서 60프레임 활성화하기: 부드러운 원격 작업을 위한 설정 방법

기본적으로 rdp 원격 데스크톱 연결 시 기본적으로 프레임을 30fps로 제한해 두었습니다. 이는 아마도 네트워크 지연(latency)을 최소화하기 위한 결정으로 보입니다. 하지만 현대의 네트워크 환경에서는 60fps도 무리 없이 구동할 수 있습니다. 그래서 원격 데스크톱에서 60fps를 활성화하는 방법까지 소개해 드리겠습니다.

설정 방법

1. 레지스트리 편집기 실행

  • 단축키: Win + R을 눌러 실행 창을 열고 regedit를 입력하여 레지스트리 편집기를 실행합니다.

2. 레지스트리 경로 이동

  • 아래의 경로로 이동합니다:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations
  • WinStations 폴더까지만 이동하시면 됩니다.

3. 새로운 DWORD 값 생성

  • 빈 공간에서 마우스 오른쪽 클릭새로 만들기 > DWORD(32비트) 값을 선택합니다.
  • 생성된 값의 이름을 DWMFRAMEINTERVAL로 지정합니다.

4. 값 수정

  • DWMFRAMEINTERVAL 값을 더블 클릭하여 편집 창을 엽니다.
  • 값 데이터16진수로 f 또는 10진수로 15를 입력합니다.
    • 왜 60fps인데 f인지 궁금하실 수 있지만, 이는 내부적으로 해당 값이 프레임 간격을 나타내며, f는 60fps에 해당하는 값입니다.

5. 서비스 관리자 실행

  • 단축키: Win + R을 눌러 실행 창을 열고 services.msc를 입력하여 서비스 관리자를 실행합니다.

6. Remote Desktop Services 재시작

  • Remote Desktop Services를 찾아 마우스 오른쪽 클릭 후 다시 시작을 선택합니다.
  • 포트 리디렉션 기능도 함께 재시작된다는 메시지가 나타나면 '예'를 클릭합니다.

적용 확인

이제 원격 데스크톱을 재접속하여 부드러운 60fps 환경이 적용되었는지 확인해 보세요. 네트워크 상태가 양호하다면 동영상 재생이나 그래픽 작업 시 이전보다 훨씬 부드러운 화면을 경험하실 수 있을 것입니다.

마치며

원격 작업 시 작은 설정 변경만으로도 작업 효율과 만족도를 크게 향상시킬 수 있습니다. 이 방법을 통해 더 나은 원격 데스크톱 환경을 즐겨보세요.

출처: Project Eli

profile
응애.

0개의 댓글