зеркало из https://github.com/microsoft/nni.git
138 строки
6.6 KiB
PowerShell
138 строки
6.6 KiB
PowerShell
#Requires -RunAsAdministrator
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# Choco.
|
|
# https://docs.chocolatey.org/en-us/choco/setup
|
|
# Community version can't customize output directory.
|
|
Write-Host "Installing Choco..."
|
|
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
|
|
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
|
|
|
|
Set-PSDebug -Trace 1
|
|
|
|
# Nuget.
|
|
# Doesn't have azcopy.
|
|
Write-Host "Installing Nuget..."
|
|
$NugetDir = "$env:ProgramData\nuget"
|
|
New-Item "$NugetDir" -ItemType Directory -Force | Out-Null
|
|
Invoke-WebRequest -Uri "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -OutFile "${NugetDir}\nuget.exe"
|
|
$env:path = "$env:path;$NugetDir"
|
|
|
|
# Install SSH.
|
|
Write-Host "Installing SSH..."
|
|
# https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse
|
|
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
|
|
# Install the OpenSSH Client
|
|
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
|
|
# Install the OpenSSH Server
|
|
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
|
|
# Start the sshd service
|
|
Set-PSDebug -Trace 0
|
|
Write-Host "Starting SSH service..."
|
|
Start-Service sshd
|
|
Set-Service -Name sshd -StartupType 'Automatic'
|
|
Write-Host "Configure firewall for SSH..."
|
|
# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
|
|
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
|
|
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
|
|
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
|
|
} else {
|
|
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
|
|
}
|
|
|
|
Set-PSDebug -Trace 1
|
|
|
|
# Create a new user (for SSH login).
|
|
$Password = ConvertTo-SecureString "P@ssW0rD!" -AsPlainText -Force
|
|
New-LocalUser "NNIUser" -Password $Password -PasswordNeverExpires
|
|
|
|
# These installation seems not working.
|
|
|
|
# Visual Studio C++ Build tools (for Cython)
|
|
# Invoke-WebRequest "https://aka.ms/vs/17/release/vs_BuildTools.exe" -OutFile "vs_BuildTools.exe"
|
|
# Start-Process -FilePath "vs_BuildTools.exe" -ArgumentList "--quiet --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended" -Wait
|
|
# Remove-Item "vs_BuildTools.exe"
|
|
|
|
# Microsoft Visual C++ Redistributable (for PyTorch)
|
|
# Invoke-WebRequest "https://aka.ms/vs/16/release/vc_redist.x64.exe" -OutFile "vc_redist.x64.exe"
|
|
# Start-Process -FilePath ".\vc_redist.x64.exe" -ArgumentList "/q /norestart" -Wait
|
|
# Remove-Item "vc_redist.x64.exe"
|
|
|
|
# Use choco instead.
|
|
choco install -y --no-progress visualstudio2019buildtools
|
|
choco install -y --no-progress visualstudio2019-workload-vctools
|
|
choco install -y --no-progress vcredist2012 vcredist2013 vcredist2015 vcredist2017
|
|
|
|
# Install CUDA.
|
|
Write-Host "Installing CUDA..."
|
|
$CudaUrl = "https://developer.download.nvidia.com/compute/cuda/11.7.0/network_installers/cuda_11.7.0_windows_network.exe"
|
|
Invoke-WebRequest $CudaUrl -OutFile "$env:ProgramData\cuda_installer.exe"
|
|
Start-Process -FilePath "$env:ProgramData\cuda_installer.exe" -ArgumentList "/s /n" -Wait
|
|
# Remove-Item "cuda_installer.exe"
|
|
# Verify CUDA.
|
|
Write-Host "Verify CUDA installation..."
|
|
$CudaDir = "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin"
|
|
# GPU driver can't be installed without a hardware
|
|
# Get-Command nvidia-smi
|
|
Get-ChildItem $CudaDir
|
|
$env:path = "$env:path;$CudaDir"
|
|
|
|
# Download GPU driver.
|
|
Invoke-WebRequest "https://us.download.nvidia.com/tesla/516.94/516.94-data-center-tesla-desktop-winserver-2016-2019-2022-dch-international.exe" -OutFile "$env:ProgramData\driver_installer.exe"
|
|
|
|
Write-Host "Installing utilities..."
|
|
|
|
# Install azcopy for cache download.
|
|
# Something wrong with the latest (10.15.0) checksum.
|
|
choco install -y --force azcopy10 --version=10.14.1 --no-progress
|
|
azcopy --version
|
|
|
|
# Install swig.
|
|
# Note that swig 4.0 is not compatible with ConfigSpace.
|
|
choco install -y --force swig --version=3.0.12 --no-progress
|
|
swig -version
|
|
|
|
# Install cmake.
|
|
choco install -y --no-progress cmake
|
|
$env:path = "$env:path;$env:ProgramFiles\CMake\bin"
|
|
cmake --version
|
|
|
|
# Install python.
|
|
# Originally I tried to install the python by downloading from official, and run the installation.
|
|
#
|
|
# Invoke-WebRequest -Uri "https://www.python.org/ftp/python/3.9.12/python-3.9.12-amd64.exe" -OutFile "python-installer.exe"
|
|
# Start-Process -FilePath .\python-installer.exe -NoNewWindow -Wait \
|
|
# -ArgumentList "/quiet InstallAllUsers=1 TargetDir=$(Agent.ToolsDirectory)\Python\3.9.12\x64 Include_launcher=0"
|
|
# New-Item -Path $(Agent.ToolsDirectory)\Python\3.9.12\x64.complete -ItemType file -Force
|
|
#
|
|
# But ``Start-Process`` fails with mysterious reasons (exit code is not zero and no error message).
|
|
# I tried with -PassThru, -NoNewWindow, -Wait, /quiet, /passive, InstallAllUsers and some other flags, but none works.
|
|
# (InstallAllUsers is the key to make it work on my local, but not on pipeline).
|
|
# I guess it's related to lack of adminstrative privileges.
|
|
# I kept this attempt here in case any one can make it work.
|
|
#
|
|
# Other two workarounds.
|
|
# 1) choco install python. The community verison can't customize output directory,
|
|
# and the output directory is only a guess (e.g., C:\Python310).
|
|
# 2) nuget install python. This seems working.
|
|
#
|
|
# Can't move to the installed python to $PythonDir\3.9.12\x64 because,
|
|
# 1. If we copy it, Python path will complain in the next few steps.
|
|
# 2. If we try to create a symlink, it will tell us that we don't have adminstrative rights.
|
|
#
|
|
# After all this struggle, the workaround here is simple:
|
|
# to install with nuget, then don't use `UsePythonVersion` in the next step.
|
|
# The workaround works because we actually never needs multiple python versions on windows.
|
|
Write-Host "Installing Python..."
|
|
$PythonDir = "$env:ProgramData\Python"
|
|
nuget install python -Version 3.9.12 -OutputDirectory "$PythonDir"
|
|
$env:path = "$env:path;$PythonDir\python.3.9.12\tools\;$PythonDir\python.3.9.12\tools\Scripts"
|
|
Write-Host "Verify Python installation..."
|
|
python --version
|
|
|
|
# Permanently update the PATHs
|
|
# https://codingbee.net/powershell/powershell-make-a-permanent-change-to-the-path-environment-variable
|
|
Write-Host "Prepare PATHs..."
|
|
Write-Host $env:path
|
|
Set-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment" -Name PATH -Value $env:path
|