TL / DR:
Существует ли какой-либо общедоступный документ, в котором четко изложена стратегия CoreML's
для размещения устройств графического процессора при запуске моделей логического вывода в macOS? Как он решает, должен ли он работать на интегрированном, дискретном или процессоре? Может ли надежно «форсировать» один путь? Как это меняется для таких систем, как новый Mac Pro с несколькими дискретными графическими процессорами, а также с несколькими eGPU?
Мое тестирование на моем rMBP показывает, что ответ отрицательный - и что температура, батарея, подключение к источнику питания, автоматические настройки графики и поддержка приложений, а также, возможно, даже некоторая эвристика архитектуры MLModel, играют роль в размещении устройства.
Я хотел бы получить ответы на некоторые вопросы!
Дольше с контекстом:
Мне интересно, есть ли какая-либо публичная документация поВыбор устройства CoreML эвристический. С добавлением 10,15 CoreML preferredMetalDevice
API для MLModelConfig
я подумал, что можно будет принудительно выполнить запрос MTLDevice
и MLModel
/ Vision.
В моем тестировании с интегрированным, дискретный и eGPU на моем rMBP 2018 с Vega 20, кажется, что только eGPU последовательно запускает модель CoreML при запросе.
Моя модель CoreML - это конвейерная модель, состоящая из классификатора MobileNet с несколькими выходами (многоголовочные классификаторыподключен к экстрактору пользовательских функций).
Мне интересно понять предпочтения выбора устройства по нескольким причинам:
a) Я хочу убедиться, что мои MLModel
снабжены изображениями CIImages
при поддержке MTLTextures
локально для устройства будет выполняться вывод, чтобы ограничить передачу PCI и продолжить обработку на одном устройстве с графическим процессором
b) Моя модель фактически получает кадры видео, а WWDC '19 / 10.15представляет VideoToolbox и API-интерфейсы AVFoundation, чтобы помочь навязывать определенные видеокодеры и декодеры на определенных графических процессорах.
Теоретически, если все работает хорошоЯ должен иметь возможность указать тот же MTLDevice
для декодирования видео, предварительной обработки, вывода CoreML / Vision и последующего кодирования - сохраняя все IOSurface
с поддержкой CVPixelBuffers
, CVMetalTextureRefs
, MPSImages
и друзей, проживающих на одном и том жеГрафический процессор.
У Apple есть видео WWDC Pro Apps, в котором говорится, что это путь к быстрому переходу Поддержка нескольких графических процессоров / поддержка декодера Afterburner.
Имеет CoreML
В действительности разрешить работу предложенного устройства?
Я использую RetBook MacBook Pro 2018 с графическим процессором Vega 20 и пробую различные способы, чтобы загорелся Vega 20.
Результаты:
Я могу надежно заставить eGPU запускать логический вывод на моем MLModel
, если я использую MLModelConfig
с preferredMetalDevice
- каждый раз.
Я могу достаточно надежно заставить встроенный графический процессор запускать логический вывод, если я его запрошу, но иногда с некоторыми конфигурациями питания от батареи, подключением или опциями автоматического переключения графики это не так. t run.
Я не могу надежно заставить последовательный графический процессор работать стабильно на любой из вышеуказанных комбинаций конфигураций - но все же вижу, что все мои ресурсы хранятся в графическом процессоре (текстуры и т. д.),и увидите, что CoreML настроен для работы там. Он просто не сообщает о какой-либо активности.
Я настроил свой info.plist для надлежащей поддержки eGPU, а также могу оперативно подключать / обнаруживать изменения устройства и отправлять работу на eGPU, а также поддерживать обнаружение запросов на удаление устройства. Это все работает. CoreML уважает мое устройство!
Любое понимание будет наиболее полезным.
Заранее спасибо.