Использование vcpkg для установки и использования библиотек C ++ ML

Vcpkg - отличный менеджер пакетов для C ++, предоставляемый Microsoft. Это значительно упрощает приобретение и установку сторонних библиотек в Windows, Linux и macOS.

Чтобы начать использовать его с вашими проектами на C ++, вам сначала нужно клонировать репозиторий на локальный компьютер. Репозиторий находится здесь. При клонировании важно выбрать папку, которую будет легко найти по пути. Что-то вроде C: \ dev \ vcpkg. Из командной строки вы должны сделать это:

git clone https://github.com/microsoft/vcpkg.git

После клонирования репозитория в локальную папку перейдите в эту папку и выполните следующую команду для создания исполняемого файла (vcpkg.exe):

.\bootstrap-vcpkg.bat

Теперь, когда вы создали исполняемый файл, вы можете использовать его для интеграции vcpkg в вашу среду сборки (например, Visual Studio 2019). Из командной строки сделайте следующее:

.\vcpkg integrate install

Допустим, вы хотите установить OpenCV4 на свой компьютер, чтобы интегрировать его в свои программы на C ++. Вы бы сделали что-то вроде этого:

.\vcpkg install opencv4 --triplet x64-windows

Триплет описывает архитектуру и среду, для которой вы хотите установить пакет. Если это первый установленный вами пакет, vcpkg загрузит и установит совместимый cmake, который затем будет использовать для сборки пакетов. Как только это будет сделано, он определит все зависимости для opencv4 и сначала построит их. Наконец, он соберет пакет opencv4 и сохранит его в кеше пакетов. После того, как вы установили пакет, вы можете использовать его в своих проектах C +.

Создание собственного пакета

Создать свой собственный пакет довольно просто. Я собираюсь привести здесь пример одного, который я создал для TensforFlow C API (см. Https://www.tensorflow.org/install/lang_c) с использованием предварительно упакованных файлов, созданных командой TensorFlow. В командной строке выполните следующие действия:

.\vcpkg create tensorflow-c-gpu https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-windows-x86_64-2.3.0.zip libtensorflow-gpu-windows-x86_64-2.3.0.zip

Здесь вы дали своему пакету имя tensorflow-c-gpu и указали ему, откуда загрузить zip-файл и как вы назовете его локально. Выполнение этой команды создаст файл cmake, который будет использоваться для сборки вашего пакета. В нашем примере это файл ports \ tensorflow-c-gpu \ tensorflow-c-gpu.cmake. Каждому пакету также нужен файл метаданных с именем vcpkg.json. Его нужно создать в той же папке, что и файл cmake. Чтобы начать редактирование этих файлов, вы можете ввести эту команду из командной строки:

.\vcpkg edit tensorflow-c-gpu

В нашем примере файл vcpkg.json будет выглядеть так:

Вы также должны отредактировать файл cmake, который был создан, чтобы использовать загруженный zip-файл, и поместить его в нужные места. Вот как выглядит мой файл tensorflow-c-gpu.cmake:

Из этого файла видно, что этот пакет поддерживает только сборки x64 в Windows. Но это все, что мне сейчас нужно 🙂

Использование пакета

Давайте создадим консольное приложение, использующее этот пакет. В Visual Studio создайте консольное приложение C ++. Я назвал свой TfConsole. Я добавлю ссылку на источник в конце этой статьи.

Создав это приложение, добавьте новый файл с именем vcpkg.json. Это описывает приложение вместе со всеми его зависимостями:

Как видите, мы указали, что для этого проекта требуется проект tensorflow-c-gpu, который мы определили и установили ранее.

Вам нужно будет изменить свойства сборки для проекта, чтобы включить этот файл манифеста:

Измените параметр Использовать манифест Vcpkg на Да, как показано здесь.

Если вы не видите параметр Vcpkg в свойствах конфигурации, это означает, что вы еще не выполнили команду «интегрировать установку», показанную ранее.

Вам также потребуется добавить библиотеку tensorflow.lib в качестве входных данных для компоновщика:

В main.cpp мы сделаем простое включение C API tensorflow, а затем воспользуемся этим, чтобы показать номер версии Tensorflow:

Важно отметить, что пакет содержит версию TensorFlow 2.3.0 для графического процессора, поэтому для его запуска на вашем компьютере необходимо установить CUDA 10.1.

Если все прошло успешно, вы увидите номер версии на выходе консоли. Стоит 2.3.0.

Вывод

Я думаю, что vcpkg manager от Microsoft - отличный менеджер пакетов, и к нему добавляется все больше и больше пакетов. Я также показал вам, как добавить свой собственный, что может быть довольно просто, если вы знаете, что делаете. Я планирую написать серию статей об использовании моделей машинного обучения в производственной среде в среде Windows. Он будет охватывать интерфейс Windows (это будет настольное приложение WPF C #) с использованием различных серверных интерфейсов. Один из бэкэндов будет использовать тензорный поток C API, который оказался довольно хардкорным, поскольку по нему нет документации и очень мало примеров использования! Но это также очень быстро (он делает логические выводы быстрее, чем мой код Python).

Посмотреть это пространство…

Ресурсы

  1. vcpkg: https://docs.microsoft.com/en-us/cpp/build/vcpkg?view=vs-2019
  2. vcpkg GitHub: https://github.com/Microsoft/vcpkg
  3. TfConsole: https://github.com/ianormy/TfConsole