Чат | Статус сборки Windows | Статус сборки Linux |
---|---|---|
Microsoft Cognitive Toolkit (https://cntk.ai) — это унифицированный набор инструментов глубокого обучения, который описывает нейронные сети как серию вычислительных шагов с помощью ориентированного графа. В этом ориентированном графе листовые узлы представляют входные значения или параметры сети, а другие узлы представляют матричные операции над своими входными данными. CNTK позволяет пользователям легко реализовывать и комбинировать популярные типы моделей, такие как DNN с прямой связью, сверточные сети (CNN) и рекуррентные сети (RNN/LSTM). Он реализует обучение стохастическому градиентному спуску (SGD, обратное распространение ошибки) с автоматической дифференциацией и распараллеливанием между несколькими графическими процессорами и серверами. CNTK доступен по лицензии с открытым исходным кодом с апреля 2015 года. Мы надеемся, что сообщество воспользуется преимуществами CNTK для более быстрого обмена идеями посредством обмена рабочим кодом с открытым исходным кодом.
Если вы предпочитаете использовать последние версии CNTK от мастера, используйте один из ночных пакетов CNTK:
Вы можете узнать больше об использовании и участии в CNTK с помощью следующих ресурсов:
Дорогое сообщество,
Благодаря нашему постоянному вкладу в ONNX и ONNX Runtime мы упростили взаимодействие в экосистеме инфраструктуры искусственного интеллекта и получили доступ к высокопроизводительным кроссплатформенным возможностям вывода как для традиционных моделей машинного обучения, так и для глубоких нейронных сетей. За последние несколько лет нам выпала честь разработать такие ключевые проекты машинного обучения с открытым исходным кодом, в том числе Microsoft Cognitive Toolkit, который позволил пользователям использовать общеотраслевые достижения в области глубокого обучения в больших масштабах.
Сегодняшний выпуск 2.7 станет последним основным выпуском CNTK. У нас могут быть некоторые последующие второстепенные выпуски с исправлениями ошибок, но они будут оцениваться в каждом конкретном случае. Планов по разработке новых функций после этого выпуска не планируется.
Версия CNTK 2.7 полностью поддерживает ONNX 1.4.1, и мы призываем тех, кто хочет ввести в эксплуатацию свои модели CNTK, воспользоваться преимуществами ONNX и среды выполнения ONNX. В дальнейшем пользователи смогут продолжать использовать развивающиеся инновации ONNX с помощью множества поддерживающих их платформ. Например, пользователи могут экспортировать модели ONNX из PyTorch или конвертировать модели TensorFlow в ONNX с помощью конвертера TensorFlow-ONNX.
Мы невероятно благодарны за всю поддержку, которую мы получили от участников и пользователей на протяжении многих лет, прошедших с момента первого выпуска CNTK с открытым исходным кодом. CNTK позволил как командам Microsoft, так и внешним пользователям выполнять сложные и крупномасштабные рабочие нагрузки во всех видах приложений глубокого обучения, таких как исторические прорывы в распознавании речи, достигнутые исследователями Microsoft Speech, создателями платформы.
Поскольку ONNX все чаще используется для обслуживания моделей, используемых в продуктах Microsoft, таких как Bing и Office, мы стремимся синтезировать инновации, полученные на основе исследований, со строгими требованиями производства для дальнейшего развития экосистемы.
Прежде всего, наша цель — сделать инновации в глубоком обучении в стеках программного и аппаратного обеспечения максимально открытыми и доступными. Мы будем усердно работать над тем, чтобы использовать существующие сильные стороны CNTK и новые современные исследования в других проектах с открытым исходным кодом, чтобы по-настоящему расширить сферу применения таких технологий.
С благодарностью,
-- Команда ЦНТК
В этом проекте принят Кодекс поведения Microsoft с открытым исходным кодом. Для получения дополнительной информации см. часто задаваемые вопросы о Кодексе поведения или свяжитесь с нами по адресу [email protected], если у вас возникнут дополнительные вопросы или комментарии.
Больше новостей вы можете найти в официальной ленте проекта.
2019-03-29. ЦНТК 2.7.0
Чтобы настроить среду сборки и выполнения в Windows:
Чтобы настроить среду сборки и выполнения в Linux с помощью Docker, создайте образ Docker Unbuntu 16.04 с помощью Dockerfiles здесь. Для других систем Linux обратитесь к Dockerfiles, чтобы настроить зависимые библиотеки для CNTK.
Модели CNTK с рекурсивными циклами можно экспортировать в модели ONNX с помощью операций сканирования.
Чтобы экспортировать модели размером более 2 ГБ в формате ONNX, используйте API cntk.Function: save(self, filename, format=ModelFormat.CNTKv2, use_external_files_to_store_parameters=False) с параметром format, установленным в ModelFormat.ONNX, и параметром use_external_files_to_store_parameters, установленным в True. В этом случае параметры модели сохраняются во внешних файлах. Экспортированные модели должны использоваться с файлами внешних параметров при выполнении оценки модели с помощью onnxruntime.
2018-11-26.
Netron теперь поддерживает визуализацию файлов CNTK v1 и CNTK v2 .model
.
17 сентября 2018 г. ЦНТК 2.6.0
Обновлена реализация групповой свертки в CNTK. Обновленная реализация отходит от создания подграфа для групповой свертки (с использованием срезов и сплайсингов) и вместо этого напрямую использует API cuDNN7 и MKL2017. Это улучшает качество работы как с точки зрения производительности, так и с точки зрения размера модели.
Например, для одной групповой операции свертки со следующими атрибутами:
Сравнительные числа для этого единственного узла следующие:
Первый заголовок | Руководитель графического процессора. время (в миллисекундах, в среднем за 1000 запусков) | Исполнительный процессор. время (в миллисекундах, в среднем за 1000 запусков) | Размер модели (в КБ, формате CNTK) |
---|---|---|---|
Старая реализация | 9.349 | 41,921 | 38 |
Новая реализация | 6.581 | 9,963 | 5 |
Ускорение/экономия | 30% ок. | 65-75% ок. | 87% |
Обновлена реализация последовательной свертки в CNTK. Обновленная реализация создает отдельный слой последовательной свертки. В отличие от обычного слоя свертки, эта операция свертки также выполняется на динамической оси (последовательности), и к этой оси применяется filter_shape[0]. Обновленная реализация поддерживает более широкие случаи, например, когда шаг > 1 для оси последовательности.
Например, последовательная свертка по пакету одноканальных черно-белых изображений. Изображения имеют одинаковую фиксированную высоту 640, но каждое имеет ширину переменной длины. Ширина тогда представляется последовательной осью. Заполнение включено, а шаг по ширине и высоте равен 2.
>>> f = SequentialConvolution((3,3), reduction_rank=0, pad=True, strides=(2,2), activation=C.relu)
>>> x = C.input_variable(**Sequence[Tensor[640]])
>>> x.shape
(640,)
>>> h = f(x)
>>> h.shape
(320,)
>>> f.W.shape
(1, 1, 3, 3)
В операторах deep_to_space и space_to_length произошли критические изменения. Они были обновлены, чтобы соответствовать спецификации ONNX, в частности, была изменена перестановка того, как измерение глубины размещается в виде блоков в пространственных измерениях, и наоборот. Пожалуйста, обратитесь к обновленным примерам документации для этих двух операций, чтобы увидеть изменения.
Добавлена поддержка тригонометрических операций Tan
и Atan
.
Добавлена поддержка атрибута alpha
в ELU op.
Обновлены алгоритмы автоматического заполнения Convolution
для обеспечения симметричного заполнения с максимальной нагрузкой на процессор, не влияя на окончательные выходные значения свертки. Это обновление расширяет диапазон случаев, которые может быть охвачен MKL API, и повышает производительность, например ResNet50.
В свойстве аргументов API CNTK Python произошло критическое изменение. Поведение по умолчанию было обновлено: теперь аргументы возвращаются в порядке Python, а не в порядке C++. Таким образом, он будет возвращать аргументы в том же порядке, в котором они передаются в операции. Если вы хотите по-прежнему получать аргументы в порядке C++, вы можете просто переопределить глобальную опцию. Это изменение должно повлиять только на следующие операции: Times, TransposeTimes и Gemm(internal).
LogSoftMax
для использования более стабильной численной реализации.BatchNormalization
CNTK до последней спецификации.DepthToSpace
и SpaceToDepth
для соответствия спецификации ONNX в отношении того, как измерение глубины размещается как измерение блока.alpha
в ELU
ONNX op.Convolution
и Pooling
. В отличие от предыдущего, эти операции ни в какой ситуации не экспортируют явную операцию Pad
.ConvolutionTranspose
. Такие атрибуты, как output_shape
, output_padding
и pads
полностью поддерживаются.StopGradient
как неактивного.Hardmax
/ Softmax
/ LogSoftmax
.Select
операций.MatMul
op.Gemm
op.MeanVarianceNormalization
от CNTK до последней спецификации.LayerNormalization
CNTK до последней спецификации.PRelu
от CNTK обновлена до последней спецификации.Gather
от CNTK обновлена до последней спецификации.ImageScaler
от CNTK до последней спецификации.Reduce
операции экспорта/импорта до последней спецификации.Flatten
от CNTK обновлена до последней спецификации.Unsqueeze
op.size
имеет семантику диаметра, а не радиуса. Добавлена проверка, превышает ли размер ядра LRN размер канала.Min
/ Max
для обработки переменных входных данных.Библиотека Cntk.Core.Managed официально преобразована в .Net Standard и поддерживает приложения .Net Core и .Net Framework как в Windows, так и в Linux. Начиная с этого выпуска, разработчики .Net смогут восстанавливать пакеты CNTK Nuget с помощью нового файла проекта в стиле .Net SDK с форматом управления пакетами, установленным на PackageReference.
Следующий код C# теперь работает как в Windows, так и в Linux:
>>> var weightParameterName = "weight";
>>> var biasParameterName = "bias";
>>> var inputName = "input";
>>> var outputDim = 2;
>>> var inputDim = 3;
>>> Variable inputVariable = Variable.InputVariable(new int[] { inputDim }, DataType.Float, inputName);
>>> var weightParameter = new Parameter(new int[] { outputDim, inputDim }, DataType.Float, 1, device, weightParameterName);
>>> var biasParameter = new Parameter(new int[] { outputDim }, DataType.Float, 0, device, biasParameterName);
>>>
>>> Function modelFunc = CNTKLib.Times(weightParameter, inputVariable) + biasParameter;
Например, достаточно просто добавить предложение ItemGroup в файл .csproj приложения .Net Core: >>> >>> >>> >>> netcoreapp2.1 >>> x64 >>> >>> >>> >>> >>> >>> >>>
16 апреля 2018 г. ЦНТК 2.5.1
Переупаковать CNTK 2.5 со сторонними библиотеками, включенными в комплекты (пакеты колеса Python)
15 марта 2018 г. ЦНТК 2.5
Измените формат вывода данных профилировщика на chrome://tracing
Включите синхронизацию для каждого узла. Рабочий пример здесь
import cntk as C
C . debugging . debug . set_node_timing ( True )
C . debugging . start_profiler () # optional
C . debugging . enable_profiler () # optional
#<trainer|evaluator|function> executions
< trainer | evaluator | function > . print_node_timing ()
C . debugging . stop_profiler ()
Пример просмотра сведений о профилировщике в chrome://tracing
Улучшение производительности вывода ЦП с использованием MKL
cntk.cntk_py.enable_cpueval_optimization()/cntk.cntk_py.disable_cpueval_optimization()
1BitSGD включен в состав CNTK
1BitSGD
теперь доступен с лицензией CNTK (лицензия MIT) в разделе Source/1BitSGD/
1bitsgd
была объединена с существующей целью графического процессораНовая функция потерь: иерархическая softmax
Распределенное обучение с несколькими учениками
Операторы
MeanVarianceNormalization
.Исправления ошибок
CNTKBinaryFormat
при пересечении границы развертки.mpi=no
cntk.convert
в misc.converter.py
, которая не позволяла конвертировать сложные сети.ОННКС
ONNX.checker
.OptimizedRNNStack
CNTK (только LSTM).MeanVarianceNormalization
.Identity
.LayerNormalization
CNTK с использованием ONNX MeanVarianceNormalization
op.Concat
.LeakyReLu
(аргумент «альфа» вернулся к типу double).Разное
find_by_uid()
в cntk.logging.graph
.28 февраля 2018 г. CNTK поддерживает ночную сборку
Если вы предпочитаете использовать последние версии CNTK от мастера, используйте один из ночных пакетов CNTK.
Кроме того, вы также можете щелкнуть соответствующий значок сборки, чтобы перейти на страницу ночной сборки.
31 января 2018 г. ЦНТК 2.4
Основные моменты:
ОП
top_k
: при прямом проходе вычисляет верхние (наибольшие) значения k и соответствующие индексы вдоль указанной оси. При обратном проходе градиент распределяется по k верхним элементам (элемент, не входящий в топ k, получает нулевой градиент).gather
теперь поддерживает аргумент осиsqueeze
и expand_dims
для легкого удаления и добавления одноэлементных осейzeros_like
и ones_like
. Во многих ситуациях вы можете просто положиться на то, что CNTK правильно передает простой 0 или 1, но иногда вам нужен реальный тензор.depth_to_space
: переупорядочивает элементы входного тензора из измерения глубины в пространственные блоки. Обычно эта операция используется для реализации субпиксельной свертки для некоторых моделей изображений со сверхвысоким разрешением.space_to_depth
: переупорядочивает элементы во входном тензоре из пространственных измерений в измерения глубины. Во многом это полная противоположность DepthToSpace.sum
: создайте новый экземпляр функции, который вычисляет поэлементную сумму входных тензоров.softsign
: создайте новый экземпляр функции, который вычисляет поэлементный softsign входного тензора.asinh
: создайте новый экземпляр функции, который вычисляет поэлементное значение asinh входного тензора.log_softmax
: создайте новый экземпляр функции, который вычисляет нормализованные значения logsoftmax входного тензора.hard_sigmoid
: создайте новый экземпляр функции, который вычисляет нормализованные значения hard_sigmoid входного тензора.element_and
, element_not
, element_or
, element_xor
поэлементные логические операцииreduce_l1
: вычисляет норму L1 элемента входного тензора вдоль предоставленных осей.reduce_l2
: вычисляет норму L2 элемента входного тензора вдоль предоставленных осей.reduce_sum_square
: вычисляет квадрат суммы элемента входного тензора по предоставленным осям.image_scaler
: изменение изображения путем масштабирования его отдельных значений.ОННКС
Reshape
для обработки InferredDimension
.producer_name
и producer_version
в модели ONNX.Conv
op не указан ни auto_pad
, ни атрибут pads
.Pooling
.InputVariable
ONNX только с одной пакетной осью.Transpose
op в соответствии с обновленной спецификацией.Conv
, ConvTranspose
и Pooling
в соответствии с обновленной спецификацией.Операторы
Convolution
изменится для групп > 1. В следующем выпуске ожидается более оптимизированная реализация групповой свертки.Convolution
.Галоидная бинарная свертка
Cntk.BinaryConvolution.so/dll
, которую можно использовать с модулем netopt
. Библиотека содержит оптимизированные операторы двоичной свертки, которые работают лучше, чем операторы двоичной свертки на основе Python. Чтобы включить Halide в сборку, загрузите выпуск Halide и установите переменную среды HALIDE_PATH
перед началом сборки. В Linux вы можете использовать ./configure --with-halide[=directory]
чтобы включить его. Дополнительную информацию о том, как использовать эту функцию, см. в разделе How_to_use_network_optimization.Дополнительную информацию см. в примечаниях к выпуску. Получите релиз на странице релизов CNTK.