Microsoft CNTK на NuGet и VisualStudio для Mac

Я использую NuGet в VisualStudio Mac Preview 2 в macOS Sierra 10.12.2

Когда я пытаюсь установить пакеты Microsoft CNTK:

Microsoft.Research.CNTK.CpuEval-acml 1.5.0

Microsoft.Research.CNTK.CpuEval-mkl 1.7.2

я получаю некоторые ошибки

Done Building Project "/Users/loretoparisi/Projects/CNTKDemo/CNTKDemo/CNTKDemo.csproj" (restore target(s)) -- FAILED.



Build FAILED.



"/Users/loretoparisi/Projects/CNTKDemo/CNTKDemo/CNTKDemo.csproj" (restore target) (1) ->

(Restore target) -> 

  /Library/Frameworks/Mono.framework/Versions/4.8.0/lib/mono/xbuild/NuGet.targets : error : Package Microsoft.Research.CNTK.CpuEval-acml 1.5.0 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package Microsoft.Research.CNTK.CpuEval-acml 1.5.0 supports: net45 (.NETFramework,Version=v4.5) [/Users/loretoparisi/Projects/CNTKDemo/CNTKDemo/CNTKDemo.csproj]
  /Library/Frameworks/Mono.framework/Versions/4.8.0/lib/mono/xbuild/NuGet.targets : error : One or more packages are incompatible with .NETCoreApp,Version=v1.0. [/Users/loretoparisi/Projects/CNTKDemo/CNTKDemo/CNTKDemo.csproj]


    0 Warning(s)
    2 Error(s)


Time Elapsed 00:00:01.57

L'applicazione è stata terminata da un segnale: SIGHUP

Install failed. Rolling back...
Executing nuget actions took 3,48 sec
Unable to restore packages.

[ОБНОВЛЕНИЕ] Используя проект консоли .NET, можно установить предварительный выпуск пакета NuGet CNTK.CPUOnly 2.0.0-beta8. Кстати, выполнение базового примера кода с использованием пакета CNTK, такого как [этот] [1] простой пример, адаптированный из примеров CNTK Eval [здесь] [2], вызывает исключение:

Unhandled Exception:
System.TypeInitializationException: The type initializer for 'CNTK.CNTKLibPINVOKE' threw an exception. ---> System.TypeInitializationException: The type initializer for 'SWIGExceptionHelper' threw an exception. ---> System.DllNotFoundException: CNTKLibraryCSBinding
  at (wrapper managed-to-native) CNTK.CNTKLibPINVOKE+SWIGExceptionHelper:SWIGRegisterExceptionCallbacks_CNTKLib (CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate)
  at CNTK.CNTKLibPINVOKE+SWIGExceptionHelper..cctor () [0x000ee] in <0337cf7b3aa84dd9ab831eb8b7a1f934>:0 
   --- End of inner exception stack trace ---
  at (wrapper managed-to-native) System.Object:__icall_wrapper_mono_generic_class_init (intptr)
  at CNTK.CNTKLibPINVOKE..cctor () [0x00000] in <0337cf7b3aa84dd9ab831eb8b7a1f934>:0 
   --- End of inner exception stack trace ---
  at CNTK.DeviceDescriptor.GetCPUDevice () [0x00000] in <0337cf7b3aa84dd9ab831eb8b7a1f934>:0 
  at CNTK.DeviceDescriptor.get_CPUDevice () [0x00000] in <0337cf7b3aa84dd9ab831eb8b7a1f934>:0 
  at CNTKDemo.MainClass.Main (System.String[] args) [0x0000b] in /Users/loretoparisi/Documents/Projects/AI/CNTKDemo/CNTKDemo/Program.cs:46 
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'CNTK.CNTKLibPINVOKE' threw an exception. ---> System.TypeInitializationException: The type initializer for 'SWIGExceptionHelper' threw an exception. ---> System.DllNotFoundException: CNTKLibraryCSBinding
  at (wrapper managed-to-native) CNTK.CNTKLibPINVOKE+SWIGExceptionHelper:SWIGRegisterExceptionCallbacks_CNTKLib (CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate,CNTK.CNTKLibPINVOKE/SWIGExceptionHelper/ExceptionDelegate)
  at CNTK.CNTKLibPINVOKE+SWIGExceptionHelper..cctor () [0x000ee] in <0337cf7b3aa84dd9ab831eb8b7a1f934>:0 
   --- End of inner exception stack trace ---
  at (wrapper managed-to-native) System.Object:__icall_wrapper_mono_generic_class_init (intptr)
  at CNTK.CNTKLibPINVOKE..cctor () [0x00000] in <0337cf7b3aa84dd9ab831eb8b7a1f934>:0 
   --- End of inner exception stack trace ---
  at CNTK.DeviceDescriptor.GetCPUDevice () [0x00000] in <0337cf7b3aa84dd9ab831eb8b7a1f934>:0 
  at CNTK.DeviceDescriptor.get_CPUDevice () [0x00000] in <0337cf7b3aa84dd9ab831eb8b7a1f934>:0 
  at CNTKDemo.MainClass.Main (System.String[] args) [0x0000b] in /Users/loretoparisi/Documents/Projects/AI/CNTKDemo/CNTKDemo/Program.cs:46 

это связано с инициализатором типа SWIGExceptionHelper:

System.TypeInitializationException: The type initializer for 'CNTK.CNTKLibPINVOKE' threw an exception. ---> System.TypeInitializationException: The type initializer for 'SWIGExceptionHelper' threw an exception. ---> System.DllNotFoundException: CNTKLibraryCSBinding

- References on CNTK Github:see [here][3].
- Filed a Xamarin Bugzilla [here][4]:


  [1]: https://gist.github.com/loretoparisi/61f5c7f8d1a21a7f59771f35c9092de6
  [2]: https://github.com/Microsoft/CNTK/blob/master/Examples/Evaluation/CNTKLibraryCSEvalCPUOnlyExamples/CNTKLibraryCSEvalExamples.cs
  [3]: https://github.com/Microsoft/CNTK/issues/1288#issuecomment-272421564
  [4]: https://bugzilla.xamarin.com/show_bug.cgi?id=51569

person loretoparisi    schedule 13.01.2017    source источник
comment
Ошибка говорит сама за себя, вы пытаетесь установить пакет, который поддерживает .net 4.5 в проекте netcoreapp1.0. Что за проект CNTKDemo.csproj?   -  person SushiHangover    schedule 13.01.2017
comment
@SushiHangover это проект консольного приложения. Это будет использовать netcoreapp1.0 т. е. (.NETCoreApp,Version=v1.0) в macOS/VisualStudio for Mac Preview.   -  person loretoparisi    schedule 17.01.2017


Ответы (1)


В настоящее время для пакета CNTK Eval Nuget требуется .NET 4.5. Я не знаю, поддерживает ли MonoFramework 4.8, который вы используете, это или нет. Кроме того, для C# Eval требуются некоторые встроенные библиотеки DLL, созданные для платформы Intel/AMD X64. Я не уверен, могут ли они работать непосредственно на вашем компьютере MAC? Еще вопрос: есть ли у вас какие-то особые причины использовать Microsoft.Research.CNTK.CpuEval-acml 1.5.0? Он устарел, в настоящее время мы используем Intel MKL вместо ACML, а последней версией является Microsoft CNTK Eval CPUOnly-mkl NuGet 2.0.0-beta7. Включите параметр «включить предварительный выпуск» при поиске пакетов Nuget, иначе вы сможете найти только Microsoft CNTK Eval CPUOnly-mkl NuGet 1.7.2.

person Zhou    schedule 13.01.2017
comment
Спасибо, использование include pre-release покажет пакет Microsoft.Research.CNTK.CpuEval-mkl 2.0.0-beta7. Теперь изучаем .NET 4.5 и MonoFramework 4.8. - person loretoparisi; 13.01.2017