Windows için Caffe Kurulumu

Linux işletim sistemi için Caffe kurmak oldukça kolay iken Windows için kurmak bir uğraştırıcı olabiliyor, kurulum sırasında yaşadığım bazı sorunları deneme yanılma yoluyla bulmam gerekti bu yüzden hataları ve çözümlerini de içeren bir kurulum rehberi hazırladım.

Gereksinimler

  • Windows İşletim Sistemi: 10 olması işlerinizi daha da kolaylaştırır.
  • Visual Studio: Kaynak kodu derlemek için kullanacağız. 2013 veya 2015 sürümü ile derleme işlemini gerçekleştirebilirsiniz. Elinizde PRO veya farklı bir lisanslı sürümü yoksa ücretsiz olarak Visual Studio 2013 Community Edition sürümünü edinebilirsiniz.
  • Cmake: Derleme işlemini Cmake ile de yapabilirsiniz, fakat burada Cmake kullanmayacağım.
  • Caffe kaynak kodu
  • Nvidia Ekran Kartı: GPU üzerinde koşacaksanız CUDA destekli bir ekran kartına ihtiyacınız var bu yüzden CUDA 7.5 sürümüne ihtiyacınız var. Windows için 7.5 sürümünü kurmanızı tavsiye ederim zira 8 size sorunlar çıkarabilir fakat son güncelleme ile bu sorunların düzeltildiği söylenmiş test etmediğim için 7.5 kullanacağım.
  • CuDNN :yani CUDA Neural Network kütüphanesi.
  • NUGET: paketler için ihtiyaç duyabilirsiniz.
  • Miniconda 2 veya Anaconda: Python ile geliştirme yapacaksanız ihtiyaç duyacaksınız. (“Anakonda içerisinde bir çok paket hali hazırda kurulu olarak gelmektedir.”)
  • Matlab R2014: Matlab ile geliştirme yapacaksanız şuanda Caffe Windows üzerinde R2014 sürümünü kullanmanız gerekmekte, 2015 ile şimdilik hiç şansınız yok maalesef.

hazırsanız başlayalım.

Kurulumlar

Öncelikle Visual Studio 2013 ü buradaki bağlantıdan indirebilirsiniz. Kurulum esnasında C++ paketlerini de seçerek kurulum adımlarını tamamlayın. Caffe for Windows’u buradaki Github deposundan indirip çıkartın. CUDA 7.5 sürümünü buradan indirip kurun. İndirmek için üye olmanızı isteyebilir üyelik adımlarını tamamlayıp ücretsiz indirebilirsiniz. Sisteminizde 8 sürümü kurulu ise öncelikle onu kaldırmayı unutmayın. Kurulumu tamamlamasının ardından  CuDNN kurulumu için buradan CUDA 7.5 için olan ve işletim sisteminize uygun 5 sürümünü indirin. İndirdiğiniz cudnn dosyasını çıkartın, içerisindeki Cuda isimli klasörü kopyalayarak CUDA’yı kurduğunuz dizine yapıştırın, varsayılan olarak “C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5” dizinindedir.

cuda_cudnn_windows_surumu

 

Çıkarttığınız Caffe kaynak kodunu C:\ dizini altına atabilirsiniz. Şimdi caffe-master/windows içerisine gidin, burada CommonSettings.props.example isimli bir dosya göreceksiniz, bu dosya derleme için gerekli ayarları barındırır. Bu dosyadaki example ekini kaldırın (CommonSettings.props). Buradaki bağlantıdan Nuget’i indirin ben nuget.exe (v3.4.4) sürümünü kullanacağım. Kullanılan paketleri restore etmek için cmd ile bulunduğunuz dizinde bir cmd açın ve aşağıdaki komut ile onarım işlemini gerçekleştirin.

nuget restore Caffe.sln -PackagesDirectory ..\..\NugetPackages -ConfigFile nuget.config

Şimdi Visual Studio 2013 ile Caffe.sln dosyasını açın. propes klasörü altındaki CommonSettings.props açın, burada

<CudaVersion>7.5</CudaVersion> etiketi kullanılacak olan sistemdeki kurulu versiyonu gösterir.

<PythonSupport>true</PythonSupport> ve   <MatlabSupport>false</MatlabSupport> etiketleri ise python veya matlab ile geliştirme yapıp yapmayacağınızı tanımlar. Ben sadece Python ile geliştirme yapacağım için true olarak değiştirdim, aynı anda her ikiside true olabilir.

<CuDnnPath>C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5</CuDnnPath> etiketleri ise CUDA’nın kurulu olduğu dizini göstermektedir.

Python ile geliştirme yapmak için buradaki bağlantıdan Miniconda (Python 2.7) indirin ve sisteminize kurun. Daha önce Python kurulu ise sisteminizdeki yolları aşağıdaki gibi düzenleyin.

miniconda_path

Miniconda script dizinine giderek burada bir cmd açın ve aşağıdaki paketleri kurun.

conda install --yes numpy scipy matplotlib scikit-image pip
pip install protobuf

CommonSettings içerisindeki PythonDir yolunuda kurduğunuz dizine göre değiştirin. Minicondayı C:\ dizinine kurduğum için aşağıdaki gibi düzenledim.

 <PropertyGroup Condition="'$(PythonSupport)'=='true'">
        <PythonDir>C:\Miniconda2\</PythonDir>
        <LibraryPath>$(PythonDir)\libs;$(LibraryPath)</LibraryPath>
        <IncludePath>$(PythonDir)\include;$(IncludePath)</IncludePath>
    </PropertyGroup>

Matlab için ise yine aynı şekilde kurulu olduğu dizini belirtmeniz gerekmekte.

   <PropertyGroup Condition="'$(MatlabSupport)'=='true'">
        <MatlabDir>B:\Program Files\MATLAB\R2014b</MatlabDir>
        <LibraryPath>$(MatlabDir)\extern\lib\win64\microsoft;$(LibraryPath)</LibraryPath>
        <IncludePath>$(MatlabDir)\extern\include;$(IncludePath)</IncludePath>
    </PropertyGroup>

Artık Visual Studio ile projeyi Release x64 ayarları ile derleyebilirsiniz. Derleme işleminin başarı ile tamamlanması sonucunda caffe kütüphanesi kullanıma hazır bir şekilde Build klasörü içerisine oluşturukacaktır. Release x64 olarak derlediğimizde caffe-master\Build\x64\Release dizinine oluşturulacaktır. Bu dizindeki pycaffe\caffe klasörünü <python_root>\lib\site-packages içerisine veya <python_root>\içerisine  kopyalamanız yeterli olacaktır.

Benim kullandığım properties dosyasını örnek oluşturması için ekliyorum.

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ImportGroup Label="PropertySheets" />
    <PropertyGroup Label="UserMacros">
        <BuildDir>$(SolutionDir)..\Build</BuildDir>
        <!--NOTE: CpuOnlyBuild and UseCuDNN flags can't be set at the same time.-->
        <CpuOnlyBuild>false</CpuOnlyBuild>
        <UseCuDNN>true</UseCuDNN>
        <CudaVersion>7.5</CudaVersion>
        <!-- NOTE: If Python support is enabled, PythonDir (below) needs to be
         set to the root of your Python installation. If your Python installation
         does not contain debug libraries, debug build will not work. -->
        <PythonSupport>true</PythonSupport>
        <!-- NOTE: If Matlab support is enabled, MatlabDir (below) needs to be
         set to the root of your Matlab installation. -->
        <MatlabSupport>false</MatlabSupport>
        <CudaDependencies></CudaDependencies>

        <!-- Set CUDA architecture suitable for your GPU.
         Setting proper architecture is important to mimize your run and compile time. -->
        <CudaArchitecture>compute_30,sm_30;compute_35,sm_35;compute_52,sm_52</CudaArchitecture>

        <!-- CuDNN 4 and 5 are supported -->
        <CuDnnPath>C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5</CuDnnPath>
        <ScriptsDir>$(SolutionDir)\scripts</ScriptsDir>
    </PropertyGroup>
    <PropertyGroup Condition="'$(CpuOnlyBuild)'=='false'">
        <CudaDependencies>cublas.lib;cuda.lib;curand.lib;cudart.lib</CudaDependencies>
    </PropertyGroup>

    <PropertyGroup Condition="'$(UseCuDNN)'=='true'">
        <CudaDependencies>cudnn.lib;$(CudaDependencies)</CudaDependencies>
    </PropertyGroup>
    <PropertyGroup Condition="'$(UseCuDNN)'=='true' And $(CuDnnPath)!=''">
        <LibraryPath>$(CuDnnPath)\cuda\lib\x64;$(LibraryPath)</LibraryPath>
        <IncludePath>$(CuDnnPath)\cuda\include;$(IncludePath)</IncludePath>
    </PropertyGroup>

    <PropertyGroup>
        <OutDir>$(BuildDir)\$(Platform)\$(Configuration)\</OutDir>
        <IntDir>$(BuildDir)\Int\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
    </PropertyGroup>
    <PropertyGroup>
        <LibraryPath>$(OutDir);$(CUDA_PATH)\lib\$(Platform);$(LibraryPath)</LibraryPath>
        <IncludePath>$(SolutionDir)..\include;$(SolutionDir)..\include\caffe\proto;$(CUDA_PATH)\include;$(IncludePath)</IncludePath>
    </PropertyGroup>
    <PropertyGroup Condition="'$(PythonSupport)'=='true'">
        <PythonDir>C:\Miniconda2\</PythonDir>
        <LibraryPath>$(PythonDir)\libs;$(LibraryPath)</LibraryPath>
        <IncludePath>$(PythonDir)\include;$(IncludePath)</IncludePath>
    </PropertyGroup>
    <PropertyGroup Condition="'$(MatlabSupport)'=='true'">
        <MatlabDir>B:\Program Files\MATLAB\R2014b</MatlabDir>
        <LibraryPath>$(MatlabDir)\extern\lib\win64\microsoft;$(LibraryPath)</LibraryPath>
        <IncludePath>$(MatlabDir)\extern\include;$(IncludePath)</IncludePath>
    </PropertyGroup>
    <ItemDefinitionGroup Condition="'$(CpuOnlyBuild)'=='true'">
        <ClCompile>
            <PreprocessorDefinitions>CPU_ONLY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        </ClCompile>
    </ItemDefinitionGroup>
    <ItemDefinitionGroup Condition="'$(UseCuDNN)'=='true'">
        <ClCompile>
            <PreprocessorDefinitions>USE_CUDNN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        </ClCompile>
        <CudaCompile>
            <Defines>USE_CUDNN</Defines>
        </CudaCompile>
    </ItemDefinitionGroup>
    <ItemDefinitionGroup Condition="'$(PythonSupport)'=='true'">
        <ClCompile>
            <PreprocessorDefinitions>WITH_PYTHON_LAYER;BOOST_PYTHON_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        </ClCompile>
    </ItemDefinitionGroup>
    <ItemDefinitionGroup Condition="'$(MatlabSupport)'=='true'">
        <ClCompile>
            <PreprocessorDefinitions>MATLAB_MEX_FILE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        </ClCompile>
    </ItemDefinitionGroup>
    <ItemDefinitionGroup>
        <ClCompile>
            <MinimalRebuild>false</MinimalRebuild>
            <MultiProcessorCompilation>true</MultiProcessorCompilation>
            <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;USE_OPENCV;USE_LEVELDB;USE_LMDB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
            <TreatWarningAsError>true</TreatWarningAsError>
        </ClCompile>
    </ItemDefinitionGroup>
    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
        <ClCompile>
            <Optimization>Full</Optimization>
            <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
            <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
            <FunctionLevelLinking>true</FunctionLevelLinking>
        </ClCompile>
        <Link>
            <EnableCOMDATFolding>true</EnableCOMDATFolding>
            <GenerateDebugInformation>true</GenerateDebugInformation>
            <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
            <OptimizeReferences>true</OptimizeReferences>
        </Link>
    </ItemDefinitionGroup>
    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
        <ClCompile>
            <Optimization>Disabled</Optimization>
            <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
            <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
        </ClCompile>
        <Link>
            <GenerateDebugInformation>true</GenerateDebugInformation>
        </Link>
    </ItemDefinitionGroup>
</Project>