| @@ -29,6 +29,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{EA9A | |||||
| EndProject | EndProject | ||||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "runtime.win-x64.SciSharp.TensorFlow-Gpu.Redist", "src\runtime.win-x64.SciSharp.TensorFlow-Gpu.Redist\runtime.win-x64.SciSharp.TensorFlow-Gpu.Redist.csproj", "{BEC7FC31-58BD-48C1-96CE-6B68570A5431}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "runtime.win-x64.SciSharp.TensorFlow-Gpu.Redist", "src\runtime.win-x64.SciSharp.TensorFlow-Gpu.Redist\runtime.win-x64.SciSharp.TensorFlow-Gpu.Redist.csproj", "{BEC7FC31-58BD-48C1-96CE-6B68570A5431}" | ||||
| EndProject | EndProject | ||||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SciSharp.TensorFlow-Gpu.Redist", "src\SciSharp.TensorFlow-Gpu.Redist\SciSharp.TensorFlow-Gpu.Redist.csproj", "{FAF0995D-88B9-444B-866F-2E9EB07D77A6}" | |||||
| EndProject | |||||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "runtime.linux-x64.SciSharp.TensorFlow-Gpu.Redist", "src\runtime.linux-x64.SciSharp.TensorFlow-Gpu.Redist\runtime.linux-x64.SciSharp.TensorFlow-Gpu.Redist.csproj", "{E26AA660-F734-444C-A982-3F19C2AF8829}" | |||||
| EndProject | |||||
| Global | Global | ||||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
| Debug|Any CPU = Debug|Any CPU | Debug|Any CPU = Debug|Any CPU | ||||
| @@ -67,7 +71,6 @@ Global | |||||
| {B598E5D5-BD2D-4191-8532-F2FBAC31AB81}.Debug|Any CPU.Build.0 = Debug|Any CPU | {B598E5D5-BD2D-4191-8532-F2FBAC31AB81}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| {B598E5D5-BD2D-4191-8532-F2FBAC31AB81}.Release|Any CPU.ActiveCfg = Release|Any CPU | {B598E5D5-BD2D-4191-8532-F2FBAC31AB81}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| {B598E5D5-BD2D-4191-8532-F2FBAC31AB81}.Release|Any CPU.Build.0 = Release|Any CPU | {B598E5D5-BD2D-4191-8532-F2FBAC31AB81}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| <<<<<<< HEAD | |||||
| {DF151A51-E9FD-41BD-B0F4-08A743755D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | {DF151A51-E9FD-41BD-B0F4-08A743755D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| {DF151A51-E9FD-41BD-B0F4-08A743755D44}.Debug|Any CPU.Build.0 = Debug|Any CPU | {DF151A51-E9FD-41BD-B0F4-08A743755D44}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| {DF151A51-E9FD-41BD-B0F4-08A743755D44}.Release|Any CPU.ActiveCfg = Release|Any CPU | {DF151A51-E9FD-41BD-B0F4-08A743755D44}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| @@ -76,12 +79,18 @@ Global | |||||
| {6F6B3382-8F87-4CD9-BF87-C81D5405685A}.Debug|Any CPU.Build.0 = Debug|Any CPU | {6F6B3382-8F87-4CD9-BF87-C81D5405685A}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| {6F6B3382-8F87-4CD9-BF87-C81D5405685A}.Release|Any CPU.ActiveCfg = Release|Any CPU | {6F6B3382-8F87-4CD9-BF87-C81D5405685A}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| {6F6B3382-8F87-4CD9-BF87-C81D5405685A}.Release|Any CPU.Build.0 = Release|Any CPU | {6F6B3382-8F87-4CD9-BF87-C81D5405685A}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| ======= | |||||
| {BEC7FC31-58BD-48C1-96CE-6B68570A5431}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | {BEC7FC31-58BD-48C1-96CE-6B68570A5431}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| {BEC7FC31-58BD-48C1-96CE-6B68570A5431}.Debug|Any CPU.Build.0 = Debug|Any CPU | {BEC7FC31-58BD-48C1-96CE-6B68570A5431}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| {BEC7FC31-58BD-48C1-96CE-6B68570A5431}.Release|Any CPU.ActiveCfg = Release|Any CPU | {BEC7FC31-58BD-48C1-96CE-6B68570A5431}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| {BEC7FC31-58BD-48C1-96CE-6B68570A5431}.Release|Any CPU.Build.0 = Release|Any CPU | {BEC7FC31-58BD-48C1-96CE-6B68570A5431}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| >>>>>>> Provide the win-x64 runtime nuget for TensorFlow Gpu | |||||
| {FAF0995D-88B9-444B-866F-2E9EB07D77A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
| {FAF0995D-88B9-444B-866F-2E9EB07D77A6}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
| {FAF0995D-88B9-444B-866F-2E9EB07D77A6}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
| {FAF0995D-88B9-444B-866F-2E9EB07D77A6}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
| {E26AA660-F734-444C-A982-3F19C2AF8829}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
| {E26AA660-F734-444C-A982-3F19C2AF8829}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
| {E26AA660-F734-444C-A982-3F19C2AF8829}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
| {E26AA660-F734-444C-A982-3F19C2AF8829}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
| EndGlobalSection | EndGlobalSection | ||||
| GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
| HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
| @@ -1,21 +1,149 @@ | |||||
| $targetDirectory = [IO.Path]::Combine($PSScriptRoot, "..", "src", "runtime.win-x64.SciSharp.TensorFlow-Gpu.Redist") | |||||
| $fileName = "libtensorflow-gpu-windows-x86_64-1.14.0.zip" | |||||
| $zipfile = [IO.Path]::Combine($PSScriptRoot, "..", "packages", $fileName) | |||||
| if (-not (Test-Path $zipfile -PathType Leaf)) { | |||||
| # Create the directory just in case it's actually needed... | |||||
| $path = [IO.Path]::Combine($PSScriptRoot, "..", "packages") | |||||
| New-Item -Path $path -Force -ItemType Directory | |||||
| Write-Host "Downloading libtensorflow gpu for Windows..." | |||||
| <# | |||||
| .SYNOPSIS | |||||
| Copy the native TensorFlow library to enable the packing a nuget to make | |||||
| them available to TensorFlow.NET | |||||
| .DESCRIPTION | |||||
| The TensorFlow libraries are copied for Windows and Linux and it becomes | |||||
| possible to bundle a meta-package containing them. | |||||
| .PARAMETER CpuLibraries | |||||
| Switch indicating if the script should download the CPU or GPU version of the | |||||
| TensorFlow libraries. | |||||
| By default the GPU version of the libraries is downloaded. | |||||
| #> | |||||
| param( | |||||
| [switch] $CpuLibraries = $false | |||||
| ) | |||||
| function Expand-TarGzFiles { | |||||
| <# | |||||
| .SYNOPSIS | |||||
| Expands the given list of files from the given archive into the given | |||||
| target directory. | |||||
| .PARAMETER Archive | |||||
| Path to the archive that should be considered. | |||||
| .PARAMETER Files | |||||
| Files that should be extracted from the archive. | |||||
| .PARAMETER TargetDirectory | |||||
| Directory into which the files should be expanded. | |||||
| #> | |||||
| param | |||||
| ( | |||||
| [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [string] $Archive, | |||||
| [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [string []] $Files, | |||||
| [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [string] $TargetDirectory | |||||
| ) | |||||
| & 7z e $Archive -o"$TargetDirectory" | |||||
| $TarArchive = Join-Path $TargetDirectory "libtensorflow.tar" | |||||
| & 7z e $TarArchive $Files -o"$TargetDirectory" | |||||
| Remove-Item $TarArchive | |||||
| } | |||||
| function Expand-ZipFiles { | |||||
| <# | |||||
| .SYNOPSIS | |||||
| Expands the given list of files from the given archive into the given target directory. | |||||
| .PARAMETER Archive | |||||
| Path to the archive that should be considered. | |||||
| .PARAMETER Files | |||||
| Files that should be extracted from the archive. | |||||
| .PARAMETER TargetDirectory | |||||
| Directory into which the files should be expanded. | |||||
| #> | |||||
| param( | |||||
| [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [string] $Archive, | |||||
| [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [string []] $Files, | |||||
| [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [string] $TargetDirectory | |||||
| ) | |||||
| & 7z e $Archive $Files -o"$TargetDirectory" | |||||
| } | |||||
| function Split-ArchiveFromUrl { | |||||
| <# | |||||
| .SYNOPSIS | |||||
| Extracts the archive name out of the given Url. | |||||
| .PARAMETER ArchiveUrl | |||||
| Url of the archive that will be downloaded. | |||||
| #> | |||||
| param( | |||||
| [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [string] $ArchiveUrl | |||||
| ) | |||||
| $uriParts = $ArchiveUrl.split("/") | |||||
| $ArchivePath = $uriParts[$uriParts.Count - 1] | |||||
| return $ArchivePath | |||||
| } | |||||
| function Copy-Archive { | |||||
| <# | |||||
| .SYNOPSIS | |||||
| This function copies the given binary file to the given target location. | |||||
| .PARAMETER ArchiveUrl | |||||
| Url where the archive should be downloaded from. | |||||
| .PARAMETER TargetDirectory | |||||
| Target directory where the archive should be downloaded. | |||||
| #> | |||||
| param ( | |||||
| [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] | |||||
| [string] $ArchiveUrl, | |||||
| [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] | |||||
| [string] $TargetDirectory | |||||
| ) | |||||
| $ArchiveName = Split-ArchiveFromUrl $ArchiveUrl | |||||
| $TargetPath = [IO.Path]::Combine($PSScriptRoot, "..", "packages", $ArchiveName) | |||||
| if (Test-Path $TargetPath -PathType Leaf) { | |||||
| Write-Error "$TargetPath already exists, please remove to download againg." | |||||
| return $TargetPath | |||||
| } | |||||
| if (-not (Test-Path $TargetDirectory -PathType Container)) { | |||||
| Write-Host "Creating missing $TargetDirectory" | |||||
| New-Item -Path $TargetDirectory -ItemType Directory | |||||
| } | |||||
| Write-Host "Downloading $ArchiveUrl, this might take a while..." | |||||
| $wc = New-Object System.Net.WebClient | $wc = New-Object System.Net.WebClient | ||||
| $wc.DownloadFile("https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-windows-x86_64-1.14.0.zip", $zipfile) | |||||
| $wc.DownloadFile($ArchiveUrl, $TargetPath) | |||||
| return $TargetPath | |||||
| } | |||||
| $LinuxGpuArchive = "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-1.14.0.tar.gz" | |||||
| $LinuxFiles = @(".\libtensorflow.tar", ".\lib\libtensorflow.so", ".\lib\libtensorflow.so.1", ".\lib\libtensorflow.so.1.14.0", ` | |||||
| ".\lib\libtensorflow_framework.so", ".\lib\libtensorflow_framework.so.1", ".\lib\libtensorflow_framework.so.1.14.0") | |||||
| $WindowsGpuArchive = "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-windows-x86_64-1.14.0.zip" | |||||
| $WindowsFiles = @("lib\tensorflow.dll") | |||||
| $PackagesDirectory = [IO.Path]::Combine($PSScriptRoot, "..", "packages") | |||||
| if (-not $CpuLibraries) { | |||||
| $WindowsArchive = $WindowsGpuArchive | |||||
| $LinuxArchive = $LinuxGpuArchive | |||||
| } | } | ||||
| $libraryName = "tensoflow.dll" | |||||
| $libraryLocation = "lib\tensorflow.dll" | |||||
| $windowsTensorFlow = Join-Path $targetDirectory $libraryName | |||||
| $Archive = Copy-Archive -ArchiveUrl $WindowsArchive -TargetDirectory $PackagesDirectory | |||||
| $TargetDirectory = [IO.Path]::Combine($PSScriptRoot, "..", "src", "runtime.win-x64.SciSharp.TensorFlow-Gpu.Redist") | |||||
| Expand-ZipFiles $Archive $WindowsFiles $TargetDirectory | |||||
| if (-not (Test-Path $windowsTensorFlow)) | |||||
| { | |||||
| & 7z e $zipfile $libraryLocation -o"$targetDirectory" | |||||
| } | |||||
| $Archive = Copy-Archive -ArchiveUrl $LinuxArchive -TargetDirectory $PackagesDirectory | |||||
| $TargetDirectory = [IO.Path]::Combine($PSScriptRoot, "..", "src", "runtime.linux-x64.SciSharp.Tensorflow-Gpu.Redist") | |||||
| Expand-TarGzFiles $Archive $LinuxFiles $TargetDirectory | |||||
| @@ -0,0 +1,81 @@ | |||||
| <Project Sdk="Microsoft.NET.Sdk"> | |||||
| <PropertyGroup> | |||||
| <OutputType>Library</OutputType> | |||||
| <TargetFramework>netstandard2.0</TargetFramework> | |||||
| <!-- TensorFlow doesn't support Gpus on Mac Os. --> | |||||
| <RuntimeIdentifiers>win-x64;linux-x64</RuntimeIdentifiers> | |||||
| <AssemblyName>SciSharp.Tensorflow-Gpu.Redist</AssemblyName> | |||||
| <PackageId>SciSharp.Tensorflow-Gpu.Redist</PackageId> | |||||
| <Version>1.0.0</Version> | |||||
| <Authors>SciSharp team</Authors> | |||||
| <Company>SciSharp STACK</Company> | |||||
| <RepositoryUrl>https://github.com/SciSharp/TensorFlow.NET</RepositoryUrl> | |||||
| <RepositoryType>git</RepositoryType> | |||||
| <Description> | |||||
| Meta-package for GPU Tensoflow library runtime distribution. | |||||
| Libraries can be directly downloaded from https://storage.googleapis.com/tensorflow/libtensorflow/ | |||||
| </Description> | |||||
| <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression> | |||||
| <PackageProjectUrl>https://github.com/SciSharp/TensorFlow.NET</PackageProjectUrl> | |||||
| <PackageTags>native;tensorflow;machine-learning;ML</PackageTags> | |||||
| <PackageOutputPath>../../packages</PackageOutputPath> | |||||
| <GeneratePackageOnBuild>false</GeneratePackageOnBuild> | |||||
| <EnableDefaultCompileItems>false</EnableDefaultCompileItems> | |||||
| <ProduceReferenceAssembly>false</ProduceReferenceAssembly> | |||||
| <IncludeBuildOutput>false</IncludeBuildOutput> | |||||
| </PropertyGroup> | |||||
| <!-- Need to add some dependencies so Meta-Project will pull runtime Project(s) --> | |||||
| <Target Name="ValidateRuntimePack" BeforeTargets="GenerateNuspec"> | |||||
| <ItemGroup> | |||||
| <RuntimeLinux Include="../../packages/runtime.linux-x64.SciSharp.Tensorflow-Gpu.Redist.*.nupkg" /> | |||||
| <RuntimeWin Include="../../packages/runtime.win-x64.SciSharp.Tensorflow-Gpu.Redist.*.nupkg" /> | |||||
| </ItemGroup> | |||||
| <Message | |||||
| Importance="high" | |||||
| Text="Package runtime.linux-x64.SciSharp.Tensorflow-Gpu.Redist: found" | |||||
| Condition="Exists('@(RuntimeLinux)')" /> | |||||
| <Message | |||||
| Importance="high" | |||||
| Text="Package runtime.linux-x64.SciSharp.Tensorflow-Gpu.Redist: not found" | |||||
| Condition="!Exists('@(RuntimeLinux)')" /> | |||||
| <Message | |||||
| Importance="high" | |||||
| Text="Package runtime.win-x64.SciSharp.Tensorflow-Gpu.Redist: found" | |||||
| Condition="Exists('@(RuntimeWin)')" /> | |||||
| <Message | |||||
| Importance="high" | |||||
| Text="Package runtime.win-x64.SciSharp.Tensorflow-Gpu.Redist: not found" | |||||
| Condition="!Exists('@(RuntimeWin)')" /> | |||||
| <Error | |||||
| Text="You must locally 'dotnet pack' at least one runtime.{rid}.SciSharp.Tensorflow-Gpu.Redist project." | |||||
| Condition="!Exists('@(RuntimeLinux)') AND !Exists('@(RuntimeWin)')" /> | |||||
| </Target> | |||||
| <PropertyGroup> | |||||
| <RestoreSources>../../packages;$(RestoreSources);https://api.nuget.org/v3/index.json</RestoreSources> | |||||
| </PropertyGroup> | |||||
| <ItemGroup Condition="Exists('../../packages/runtime.linux-x64.SciSharp.Tensorflow-Gpu.Redist.1.0.0.nupkg')"> | |||||
| <PackageReference Include="runtime.linux-x64.SciSharp.Tensorflow-Gpu.Redist" Version="1.0.0" /> | |||||
| </ItemGroup> | |||||
| <ItemGroup Condition="Exists('../../packages/runtime.win-x64.SciSharp.Tensorflow-Gpu.Redist.1.0.0.nupkg')"> | |||||
| <PackageReference Include="runtime.win-x64.SciSharp.Tensorflow-Gpu.Redist" Version="1.0.0" /> | |||||
| </ItemGroup> | |||||
| <ItemGroup> | |||||
| <RuntimeLinux Include="../../packages/runtime.linux-x64.SciSharp.Tensorflow-Gpu.Redist.*.nupkg" /> | |||||
| <RuntimeWin Include="../../packages/runtime.win-x64.SciSharp.Tensorflow-Gpu.Redist.*.nupkg" /> | |||||
| <Content | |||||
| Include="runtime.json" | |||||
| Condition="Exists('@(RuntimeLinux)') AND Exists('@(RuntimeWin)')"> | |||||
| <PackagePath>runtime.json</PackagePath> | |||||
| <Pack>true</Pack> | |||||
| <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | |||||
| </Content> | |||||
| </ItemGroup> | |||||
| </Project> | |||||
| @@ -0,0 +1,14 @@ | |||||
| { | |||||
| "runtimes": { | |||||
| "linux-x64": { | |||||
| "SciSharp.TensorFlow-Gpu.Redist": { | |||||
| "runtime.linux-x64.SciSharp.Tensorflow-Gpu.Redist": "1.0.0" | |||||
| } | |||||
| }, | |||||
| "win-x64": { | |||||
| "SciSharp.TensorFlow-Gpu.Redist": { | |||||
| "runtime.win-x64.SciSharp.Tensorflow-Gpu.Redist": "1.0.0" | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,40 @@ | |||||
| <Project Sdk="Microsoft.NET.Sdk"> | |||||
| <PropertyGroup> | |||||
| <OutputType>Library</OutputType> | |||||
| <TargetFramework>netstandard2.0</TargetFramework> | |||||
| <RuntimeIdentifier>linux-x64</RuntimeIdentifier> | |||||
| <AssemblyName>SciSharp.Tensorflow-Gpu.Redist</AssemblyName> | |||||
| <PackageId>runtime.linux-x64.SciSharp.Tensorflow-Gpu.Redist</PackageId> | |||||
| <Version>1.0.0</Version> | |||||
| <Authors>SciSharp team</Authors> | |||||
| <Company>SciSharp STACK</Company> | |||||
| <RepositoryUrl>https://github.com/SciSharp/TensorFlow.NET</RepositoryUrl> | |||||
| <RepositoryType>git</RepositoryType> | |||||
| <Description> | |||||
| Distribution of the Linux GPU Tensoflow library. | |||||
| Dll can be directly downloaded from https://storage.googleapis.com/tensorflow/libtensorflow/ | |||||
| </Description> | |||||
| <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression> | |||||
| <PackageProjectUrl>https://github.com/SciSharp/TensorFlow.NET</PackageProjectUrl> | |||||
| <PackageTags>native;tensorflow;machine-learning;ML</PackageTags> | |||||
| <PackageOutputPath>../../packages</PackageOutputPath> | |||||
| <GeneratePackageOnBuild>false</GeneratePackageOnBuild> | |||||
| <EnableDefaultCompileItems>false</EnableDefaultCompileItems> | |||||
| <ProduceReferenceAssembly>false</ProduceReferenceAssembly> | |||||
| <IncludeBuildOutput>false</IncludeBuildOutput> | |||||
| </PropertyGroup> | |||||
| <ItemGroup> | |||||
| <!-- All dlls will be dropped in a folder available through DllImport.--> | |||||
| <Content Include="*.so.*"> | |||||
| <PackagePath>runtimes/$(RuntimeIdentifier)/native/%(Filename)%(Extension)</PackagePath> | |||||
| <Pack>true</Pack> | |||||
| <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | |||||
| </Content> | |||||
| </ItemGroup> | |||||
| </Project> | |||||