Skip to content

Commit

Permalink
Support CUDA 11 except for CentOS (#205)
Browse files Browse the repository at this point in the history
* feat: add windows script
* fix: add condition of cuda 11 and minor bug
* feat: add linux docker file and fix scripts for cuda 11
* fix: add directory for build
* fix: update dlib for support cuda 11 on linux
  • Loading branch information
takuya-takeuchi authored Aug 2, 2020
1 parent d6140f7 commit 04546ef
Show file tree
Hide file tree
Showing 24 changed files with 181 additions and 7 deletions.
12 changes: 12 additions & 0 deletions docker/base/centos/7/cuda/11.0/Dockerfile.ignored
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
FROM nvidia/cuda:11.0-cudnn8-devel-centos7
LABEL maintainer "Takuya Takeuchi <takuya.takeuchi.dev@gmail.com>"

# install package to build
RUN yum update -y && yum install -y \
ca-certificates
RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN yum update -y && yum install -y \
libX11-devel \
lapack-devel \
openblas-devel \
&& yum clean all
9 changes: 9 additions & 0 deletions docker/base/ubuntu/16/cuda/11.0/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM nvidia/cuda:11.0-cudnn8-devel-ubuntu16.04
LABEL maintainer "Takuya Takeuchi <takuya.takeuchi.dev@gmail.com>"

# install package to build
RUN apt-get update && apt-get install -y \
libopenblas-dev \
liblapack-dev \
libx11-6 \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
47 changes: 47 additions & 0 deletions docker/devel/centos/7/cuda/11.0/Dockerfile.ignored
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
FROM nvidia/cuda:11.0-cudnn8-devel-centos7
LABEL maintainer "Takuya Takeuchi <takuya.takeuchi.dev@gmail.com>"

# install package to build
RUN yum update -y && yum install -y \
ca-certificates
RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN yum update -y && yum install -y \
libX11-devel \
lapack-devel \
openblas-devel \
cmake3
RUN yum groupinstall -y "Development Tools"

# set compiler
ENV CMAKE_C_COMPILER=/usr/bin/gcc
ENV CMAKE_CXX_COMPILER=/usr/bin/g++

# set env to build by using CUDA
ENV CUDA_PATH /usr/local/cuda
ENV PATH $CUDA_PATH/bin:$PATH
ENV CPATH $CUDA_PATH/include:$CPATH
ENV LD_LIBRARY_PATH $CUDA_PATH/lib64:$LD_LIBRARY_PATH
ENV NCCL_ROOT /usr/local/nccl
ENV CPATH $NCCL_ROOT/include:$CPATH
ENV LD_LIBRARY_PATH $NCCL_ROOT/lib/:$LD_LIBRARY_PATH
ENV LIBRARY_PATH $NCCL_ROOT/lib/:$LIBRARY_PATH

# Register Microsoft key and feed
RUN yum update -y && yum install -y \
curl
RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/microsoft.repo
RUN yum update -y && yum install -y \
powershell \
&& yum clean all

# user cmake 3 instead of cmake 2
RUN alternatives --install /usr/local/bin/cmake cmake /usr/bin/cmake 10 \
--slave /usr/local/bin/ctest ctest /usr/bin/ctest \
--slave /usr/local/bin/cpack cpack /usr/bin/cpack \
--slave /usr/local/bin/ccmake ccmake /usr/bin/ccmake \
--family cmake
RUN alternatives --install /usr/local/bin/cmake cmake /usr/bin/cmake3 20 \
--slave /usr/local/bin/ctest ctest /usr/bin/ctest3 \
--slave /usr/local/bin/cpack cpack /usr/bin/cpack3 \
--slave /usr/local/bin/ccmake ccmake /usr/bin/ccmake3 \
--family cmake
35 changes: 35 additions & 0 deletions docker/devel/ubuntu/16/cuda/11.0/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
FROM nvidia/cuda:11.0-cudnn8-devel-ubuntu16.04
LABEL maintainer "Takuya Takeuchi <takuya.takeuchi.dev@gmail.com>"

# install package to build
RUN apt-get update && apt-get install -y \
build-essential \
libopenblas-dev \
liblapack-dev \
libx11-dev \
cmake \
&& apt-get clean && rm -rf /var/lib/apt/lists/*

# set compiler
ENV CMAKE_C_COMPILER=/usr/bin/gcc
ENV CMAKE_CXX_COMPILER=/usr/bin/g++

# set env to build by using CUDA
ENV CUDA_PATH /usr/local/cuda
ENV PATH $CUDA_PATH/bin:$PATH
ENV CPATH $CUDA_PATH/include:$CPATH
ENV LD_LIBRARY_PATH $CUDA_PATH/lib64:$LD_LIBRARY_PATH
ENV NCCL_ROOT /usr/local/nccl
ENV CPATH $NCCL_ROOT/include:$CPATH
ENV LD_LIBRARY_PATH $NCCL_ROOT/lib/:$LD_LIBRARY_PATH
ENV LIBRARY_PATH $NCCL_ROOT/lib/:$LIBRARY_PATH

# Register Microsoft key and feed
RUN apt-get update && apt-get install -y \
wget \
apt-transport-https
RUN wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
RUN dpkg -i packages-microsoft-prod.deb && rm packages-microsoft-prod.deb
RUN apt-get update && apt-get install -y \
powershell \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
1 change: 1 addition & 0 deletions nuget/BuildCentOS7.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ $BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target =
$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "cuda"; Architecture = 64; Postfix = ""; RID = "$OperatingSystem-x64"; CUDA = 100 }
$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "cuda"; Architecture = 64; Postfix = ""; RID = "$OperatingSystem-x64"; CUDA = 101 }
$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "cuda"; Architecture = 64; Postfix = ""; RID = "$OperatingSystem-x64"; CUDA = 102 }
$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "cuda"; Architecture = 64; Postfix = ""; RID = "$OperatingSystem-x64"; CUDA = 110 }
#$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "arm"; Architecture = 64; Postfix = "64"; RID = "$OperatingSystem-arm64"; CUDA = 0 }
#$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "arm"; Architecture = 32; Postfix = ""; RID = "$OperatingSystem-arm"; CUDA = 0 }

Expand Down
1 change: 1 addition & 0 deletions nuget/BuildUbuntu16.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ $BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target =
$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "cuda"; Architecture = 64; Postfix = ""; RID = "$OperatingSystem-x64"; CUDA = 100 }
$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "cuda"; Architecture = 64; Postfix = ""; RID = "$OperatingSystem-x64"; CUDA = 101 }
$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "cuda"; Architecture = 64; Postfix = ""; RID = "$OperatingSystem-x64"; CUDA = 102 }
$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "cuda"; Architecture = 64; Postfix = ""; RID = "$OperatingSystem-x64"; CUDA = 110 }
#$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "arm"; Architecture = 64; Postfix = "64"; RID = "$OperatingSystem-arm64"; CUDA = 0 }
#$BuildTargets += New-Object PSObject -Property @{ Platform = "desktop"; Target = "arm"; Architecture = 32; Postfix = ""; RID = "$OperatingSystem-arm"; CUDA = 0 }

Expand Down
12 changes: 8 additions & 4 deletions nuget/BuildUtils.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ class Config
92,
100,
101,
102
102,
110
)

$CudaVersionHash =
Expand All @@ -46,7 +47,8 @@ class Config
92 = "CUDA_PATH_V9_2";
100 = "CUDA_PATH_V10_0";
101 = "CUDA_PATH_V10_1";
102 = "CUDA_PATH_V10_2"
102 = "CUDA_PATH_V10_2";
110 = "CUDA_PATH_V11_0"
}

$VisualStudio = "Visual Studio 15 2017"
Expand Down Expand Up @@ -93,7 +95,7 @@ class Config
# %4: Architecture (32/64)
# %5: Platform (desktop/android/ios/uwp)
# %6: Optional Argument
# if Target is cuda, CUDA version if Target is cuda [90/91/92/100/101/102]
# if Target is cuda, CUDA version if Target is cuda [90/91/92/100/101/102/110]
# if Target is mkl and Windows, IntelMKL directory path
#***************************************
Config( [string]$Root,
Expand Down Expand Up @@ -128,7 +130,7 @@ class Config
if ($this.PlatformArray.Contains($Platform) -eq $False)
{
$candidate = $this.PlatformArray -join "/"
Write-Host "Error: Specify Architecture [${candidate}]" -ForegroundColor Red
Write-Host "Error: Specify Platform [${candidate}]" -ForegroundColor Red
exit -1
}

Expand Down Expand Up @@ -416,6 +418,8 @@ class Config
{
# CUDA_PATH_V10_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
# CUDA_PATH_V10_1=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
# CUDA_PATH_V10_2=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
# CUDA_PATH_V11_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0
# CUDA_PATH_V9_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0
# CUDA_PATH_V9_1=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1
# CUDA_PATH_V9_2=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2
Expand Down
1 change: 1 addition & 0 deletions nuget/BuildWindows.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ $BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture =
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; RID = "$OperatingSystem-x64"; CUDA = 100 }
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; RID = "$OperatingSystem-x64"; CUDA = 101 }
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; RID = "$OperatingSystem-x64"; CUDA = 102 }
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; RID = "$OperatingSystem-x64"; CUDA = 110 }

foreach ($BuildTarget in $BuildTargets)
{
Expand Down
8 changes: 8 additions & 0 deletions nuget/TestPackage.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,13 @@ $tmp102.Add("$env:CUDA_PATH_V10_2\bin\cudnn64_7.dll")
$tmp102.Add("$env:CUDA_PATH_V10_2\bin\curand64_10.dll")
$tmp102.Add("$env:CUDA_PATH_V10_2\bin\cusolver64_10.dll")

# For DlibDotNet.CUDA110
$tmp102 = New-Object 'System.Collections.Generic.List[string]'
$tmp102.Add("$env:CUDA_PATH_V10_2\bin\cublas64_11.dll")
$tmp102.Add("$env:CUDA_PATH_V10_2\bin\cudnn64_8.dll")
$tmp102.Add("$env:CUDA_PATH_V10_2\bin\curand64_10.dll")
$tmp102.Add("$env:CUDA_PATH_V10_2\bin\cusolver64_10.dll")

$BuildTargets = @()
$BuildTargets += New-Object PSObject -Property @{PlatformTarget = "x64"; Architecture = 64; Package = "DlibDotNet"; Dependencies = $null }
$BuildTargets += New-Object PSObject -Property @{PlatformTarget = "x86"; Architecture = 32; Package = "DlibDotNet"; Dependencies = $null }
Expand All @@ -222,6 +229,7 @@ $BuildTargets += New-Object PSObject -Property @{PlatformTarget = "x64"; Archite
$BuildTargets += New-Object PSObject -Property @{PlatformTarget = "x64"; Architecture = 64; Package = "DlibDotNet.CUDA100"; Dependencies = $tmp100 }
$BuildTargets += New-Object PSObject -Property @{PlatformTarget = "x64"; Architecture = 64; Package = "DlibDotNet.CUDA101"; Dependencies = $tmp101 }
$BuildTargets += New-Object PSObject -Property @{PlatformTarget = "x64"; Architecture = 64; Package = "DlibDotNet.CUDA102"; Dependencies = $tmp102 }
$BuildTargets += New-Object PSObject -Property @{PlatformTarget = "x64"; Architecture = 64; Package = "DlibDotNet.CUDA110"; Dependencies = $tmp110 }
$BuildTargets += New-Object PSObject -Property @{PlatformTarget = "x64"; Architecture = 64; Package = "DlibDotNet.MKL"; Dependencies = $null }
$BuildTargets += New-Object PSObject -Property @{PlatformTarget = "x86"; Architecture = 32; Package = "DlibDotNet.MKL"; Dependencies = $null }
$BuildTargets += New-Object PSObject -Property @{PlatformTarget = "arm"; Architecture = 32; Package = "DlibDotNet.ARM"; Dependencies = $null }
Expand Down
1 change: 1 addition & 0 deletions nuget/TestPackageCentOS7.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ $BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture =
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; CUDA = 100; Package = "DlibDotNet.CUDA100"; PlatformTarget="x64"; Postfix = ""; RID = "$RidOperatingSystem-x64"; }
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; CUDA = 101; Package = "DlibDotNet.CUDA101"; PlatformTarget="x64"; Postfix = ""; RID = "$RidOperatingSystem-x64"; }
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; CUDA = 102; Package = "DlibDotNet.CUDA102"; PlatformTarget="x64"; Postfix = ""; RID = "$RidOperatingSystem-x64"; }
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; CUDA = 102; Package = "DlibDotNet.CUDA110"; PlatformTarget="x64"; Postfix = ""; RID = "$RidOperatingSystem-x64"; }

foreach($BuildTarget in $BuildTargets)
{
Expand Down
1 change: 1 addition & 0 deletions nuget/TestPackageUbuntu16.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ $BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture =
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; CUDA = 100; Package = "DlibDotNet.CUDA100"; PlatformTarget="x64"; Postfix = ""; RID = "$RidOperatingSystem-x64"; }
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; CUDA = 101; Package = "DlibDotNet.CUDA101"; PlatformTarget="x64"; Postfix = ""; RID = "$RidOperatingSystem-x64"; }
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; CUDA = 102; Package = "DlibDotNet.CUDA102"; PlatformTarget="x64"; Postfix = ""; RID = "$RidOperatingSystem-x64"; }
$BuildTargets += New-Object PSObject -Property @{Target = "cuda"; Architecture = 64; CUDA = 102; Package = "DlibDotNet.CUDA110"; PlatformTarget="x64"; Postfix = ""; RID = "$RidOperatingSystem-x64"; }

foreach($BuildTarget in $BuildTargets)
{
Expand Down
1 change: 1 addition & 0 deletions nuget/TestPackageWindows.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ $BuildTargets += New-Object PSObject -Property @{Package = "DlibDotNet.CUDA92";
$BuildTargets += New-Object PSObject -Property @{Package = "DlibDotNet.CUDA100"; PlatformTarget="x64"; RID = "$OperatingSystem-x64"; }
$BuildTargets += New-Object PSObject -Property @{Package = "DlibDotNet.CUDA101"; PlatformTarget="x64"; RID = "$OperatingSystem-x64"; }
$BuildTargets += New-Object PSObject -Property @{Package = "DlibDotNet.CUDA102"; PlatformTarget="x64"; RID = "$OperatingSystem-x64"; }
$BuildTargets += New-Object PSObject -Property @{Package = "DlibDotNet.CUDA110"; PlatformTarget="x64"; RID = "$OperatingSystem-x64"; }

foreach($BuildTarget in $BuildTargets)
{
Expand Down
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
53 changes: 53 additions & 0 deletions nuget/nuspec/DlibDotNet.CUDA-110.nuspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?xml version="1.0"?>
<package >
<metadata>
<id>DlibDotNet.CUDA110</id>
<version>19.18.0.20200525</version>
<title>DlibDotNet for CUDA 11.0</title>
<authors>Takuya Takeuchi</authors>
<owners>Takuya Takeuchi</owners>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<license type="file">LICENSE.txt</license>
<projectUrl>https://github.com/takuya-takeuchi/DlibDotNet</projectUrl>
<iconUrl>https://github.com/takuya-takeuchi/DlibDotNet/blob/master/nuget/ml128.png?raw=true</iconUrl>
<description>Dlib wrapper library written in C++ and C# for Windows, MacOS and Linux

Requirements: Visual C++ 2017 Redistributable Package and cudnn 8</description>
<releaseNotes></releaseNotes>
<copyright>© Takuya Takeuchi 2017-2020</copyright>
<tags>dlib .net machinelearning</tags>
<serviceable>true</serviceable>
</metadata>

<files>
<file src="build\DlibDotNet.Native.props" target="build\DlibDotNet.props" />
<!-- allows the 'DlibDotNet' package to read runtimes\** folder -->
<file src="build\DlibDotNet.targets" target="build\DlibDotNet.targets" />
<!-- cross-targetting via compile-time references -->
<file src="ref\**\*" target="ref" />
<file src="..\artifacts\cuda-110\runtimes\**\*" target="runtimes" />

<file src="..\..\src\DlibDotNet\bin\Release\netstandard2.0\DlibDotNet.dll" target="lib\netstandard2.0" />

<file src="..\artifacts\cuda-110\runtimes\win-x64\native\DlibDotNetNative.dll" target="runtimes\win-x64\native\DlibDotNetNative.dll" />
<file src="..\artifacts\cuda-110\runtimes\win-x64\native\DlibDotNetNativeDnn.dll" target="runtimes\win-x64\native\DlibDotNetNativeDnn.dll" />
<file src="..\artifacts\cuda-110\runtimes\linux-x64\native\libDlibDotNetNative.so" target="runtimes\linux-x64\native\libDlibDotNetNative.so" />
<file src="..\artifacts\cuda-110\runtimes\linux-x64\native\libDlibDotNetNativeDnn.so" target="runtimes\linux-x64\native\libDlibDotNetNativeDnn.so" />
<file src="..\artifacts\cuda-110\runtimes\centos-x64\native\libDlibDotNetNative.so" target="runtimes\centos-x64\native\libDlibDotNetNative.so" />
<file src="..\artifacts\cuda-110\runtimes\centos-x64\native\libDlibDotNetNativeDnn.so" target="runtimes\centos-x64\native\libDlibDotNetNativeDnn.so" />

<!--
<file src="..\artifacts\cuda-110\runtimes\osx-x64\native\libDlibDotNetNative.dylib" target="runtimes\osx-x64\native\libDlibDotNetNative.dylib" />
<file src="..\artifacts\cuda-110\runtimes\osx-x64\native\libDlibDotNetNativeDnn.dylib" target="runtimes\osx-x64\native\libDlibDotNetNativeDnn.dylib" />
-->

<!-- license -->
<file src="..\..\LICENSE.txt" target="" />
<file src="..\..\Licenses\dlib.txt" target="licenses" />
<file src="..\..\Licenses\giflib.txt" target="licenses" />
<file src="..\..\Licenses\libjpeg.txt" target="licenses" />
<file src="..\..\Licenses\libpng.txt" target="licenses" />
<file src="..\..\Licenses\zlib.txt" target="licenses" />
</files>

</package>
2 changes: 1 addition & 1 deletion src/DlibDotNet.Native.Dnn/Build.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#%3: Architecture (32/64)
#%4: Platform (desktop,android/ios/uwp)
#%5: Optional Argument
# if Target is cuda, CUDA version if Target is cuda [90/91/92/100/101/102]
# if Target is cuda, CUDA version if Target is cuda [90/91/92/100/101/102/110]
# if Target is mkl and Windows, IntelMKL directory path
#***************************************
Param
Expand Down
2 changes: 1 addition & 1 deletion src/DlibDotNet.Native/Build.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#%3: Architecture (32/64)
#%4: Platform (desktop,android/ios/uwp)
#%5: Optional Argument
# if Target is cuda, CUDA version if Target is cuda [90/91/92/100/101/102]
# if Target is cuda, CUDA version if Target is cuda [90/91/92/100/101/102/110]
# if Target is mkl and Windows, IntelMKL directory path
#***************************************
Param
Expand Down

0 comments on commit 04546ef

Please sign in to comment.