채팅 | Windows 빌드 상태 | 리눅스 빌드 상태 |
---|---|---|
Microsoft Cognitive Toolkit(https://cntk.ai)은 방향성 그래프를 통해 신경망을 일련의 계산 단계로 설명하는 통합 딥 러닝 도구 키트입니다. 이 방향 그래프에서 리프 노드는 입력 값 또는 네트워크 매개변수를 나타내고 다른 노드는 입력에 대한 행렬 연산을 나타냅니다. CNTK를 사용하면 사용자는 피드포워드 DNN, CNN(컨벌루션 네트워크) 및 RNN/LSTM(반복 네트워크)과 같은 널리 사용되는 모델 유형을 쉽게 실현하고 결합할 수 있습니다. 여러 GPU 및 서버에 걸쳐 자동 미분 및 병렬화를 통해 확률적 경사하강법(SGD, 오류 역전파) 학습을 구현합니다. CNTK는 2015년 4월부터 오픈 소스 라이선스로 제공되었습니다. 오픈 소스 작업 코드 교환을 통해 커뮤니티가 CNTK를 활용하여 더 빠르게 아이디어를 공유할 수 있기를 바랍니다.
마스터의 최신 CNTK 비트를 사용하려면 CNTK nightly 패키지 중 하나를 사용하세요.
다음 리소스를 통해 CNTK 사용 및 기여에 대해 자세히 알아볼 수 있습니다.
친애하는 커뮤니티 여러분,
ONNX 및 ONNX Runtime에 대한 지속적인 기여를 통해 우리는 AI 프레임워크 생태계 내에서 상호 운용하고 기존 ML 모델과 심층 신경망 모두에 대한 고성능 크로스 플랫폼 추론 기능에 액세스하는 것을 더욱 쉽게 만들었습니다. 지난 몇 년 동안 우리는 사용자가 딥 러닝의 업계 전반에 걸친 발전을 대규모로 활용할 수 있도록 지원하는 Microsoft Cognitive Toolkit을 포함하여 이러한 주요 오픈 소스 기계 학습 프로젝트를 개발하는 특권을 누려왔습니다.
오늘의 2.7 릴리스는 CNTK의 마지막 주요 릴리스가 될 것입니다. 버그 수정을 위한 후속 마이너 릴리스가 있을 수 있지만 이는 사례별로 평가됩니다. 이번 릴리스 이후에는 새로운 기능을 개발할 계획이 없습니다.
CNTK 2.7 릴리스는 ONNX 1.4.1을 완벽하게 지원하며 CNTK 모델을 운영하려는 사람들이 ONNX 및 ONNX 런타임을 활용하도록 권장합니다. 앞으로 사용자는 이를 지원하는 다양한 프레임워크를 통해 진화하는 ONNX 혁신을 계속 활용할 수 있습니다. 예를 들어 사용자는 기본적으로 PyTorch에서 ONNX 모델을 내보내거나 TensorFlow-ONNX 변환기를 사용하여 TensorFlow 모델을 ONNX로 변환할 수 있습니다.
우리는 CNTK의 초기 오픈 소스 출시 이후 수년 동안 기여자와 사용자로부터 받은 모든 지원에 대해 매우 감사하고 있습니다. CNTK를 사용하면 Microsoft 팀과 외부 사용자 모두 프레임워크의 창시자인 Microsoft 음성 연구원이 달성한 음성 인식 분야의 역사적 혁신과 같은 모든 방식의 딥 러닝 애플리케이션에서 복잡하고 대규모의 워크로드를 실행할 수 있습니다.
ONNX는 Bing 및 Office와 같은 Microsoft 제품 전반에 걸쳐 사용되는 모델을 제공하는 데 점점 더 많이 사용되고 있으므로 우리는 생태계를 발전시키기 위해 엄격한 생산 요구 사항과 연구의 혁신을 통합하는 데 전념하고 있습니다.
무엇보다도 우리의 목표는 소프트웨어 및 하드웨어 스택 전반에 걸쳐 딥 러닝의 혁신을 최대한 개방적이고 접근 가능하게 만드는 것입니다. 우리는 CNTK의 기존 강점과 새로운 최첨단 연구를 다른 오픈 소스 프로젝트에 적용하여 이러한 기술의 범위를 진정으로 넓힐 수 있도록 열심히 노력할 것입니다.
감사의 마음으로,
-- CNTK 팀
이 프로젝트는 Microsoft 오픈 소스 행동 강령을 채택했습니다. 자세한 내용은 행동 강령 FAQ를 참조하거나 추가 질문이나 의견이 있는 경우 [email protected]으로 문의하세요.
공식 프로젝트 피드에서 더 많은 소식을 만나보실 수 있습니다
2019-03-29. CNTK 2.7.0
Windows에서 빌드 및 런타임 환경을 설정하려면 다음 안내를 따르세요.
docker를 사용하여 Linux에서 빌드 및 런타임 환경을 설정하려면 여기에서 Dockerfiles를 사용하여 Unbuntu 16.04 docker 이미지를 빌드하십시오. 다른 Linux 시스템의 경우 Dockerfiles를 참조하여 CNTK용 종속 라이브러리를 설정하세요.
재귀 루프가 있는 CNTK 모델은 스캔 작업을 통해 ONNX 모델로 내보낼 수 있습니다.
2GB보다 큰 모델을 ONNX 형식으로 내보내려면 cntk.Function API: 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
파일 시각화를 지원합니다.
2018-09-17. CNTK 2.6.0
CNTK의 그룹 컨볼루션 구현이 업데이트되었습니다. 업데이트된 구현은 그룹 컨볼루션(슬라이싱 및 스플라이싱 사용)을 위한 하위 그래프 생성에서 벗어나 대신 cuDNN7 및 MKL2017 API를 직접 사용합니다. 이를 통해 성능과 모델 크기 측면에서 경험이 향상됩니다.
예를 들어, 다음 속성을 가진 단일 그룹 컨볼루션 작업의 경우:
이 단일 노드의 비교 번호는 다음과 같습니다.
첫 번째 헤더 | GPU 실행 시간(밀리초 단위, 평균 1000 실행) | CPU 실행 시간(밀리초 단위, 평균 1000 실행) | 모델 크기(KB, CNTK 형식) |
---|---|---|---|
이전 구현 | 9.349 | 41.921 | 38 |
새로운 구현 | 6.581 | 9.963 | 5 |
속도 향상/절감 | 약 30% | 65-75% 대강. | 87% |
CNTK의 순차 컨볼루션 구현이 업데이트되었습니다. 업데이트된 구현에서는 별도의 순차 컨볼루션 레이어가 생성됩니다. 일반 컨볼루션 레이어와 달리 이 연산은 동적 축(시퀀스)에서도 컨벌루션되며 해당 축에는 filter_shape[0]이 적용됩니다. 업데이트된 구현에서는 시퀀스 축의 stride > 1과 같은 더 광범위한 사례를 지원합니다.
예를 들어, 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)
깊이_to_space 및 space_to_깊이 연산자에 주요 변경 사항이 있습니다. 이는 ONNX 사양과 일치하도록 업데이트되었습니다. 특히 깊이 차원이 공간 차원에서 블록으로 배치되는 방식에 대한 순열이 변경되었으며 그 반대의 경우도 마찬가지입니다. 변경 사항을 확인하려면 이 두 가지 작업에 대해 업데이트된 문서 예제를 참조하세요.
삼각함수 연산 Tan
및 Atan
에 대한 지원이 추가되었습니다.
ELU op에 alpha
속성에 대한 지원이 추가되었습니다.
최종 컨볼루션 출력 값에 영향을 주지 않고 CPU에서 최선의 노력으로 대칭 패딩을 생성하도록 Convolution
의 자동 패딩 알고리즘을 업데이트했습니다. 이 업데이트는 MKL API에서 처리할 수 있는 사례 범위를 늘리고 ResNet50과 같은 성능을 향상시킵니다.
CNTK Python API의 인수 속성에 주요 변경 사항이 있습니다. C++ 순서 대신 Python 순서로 인수를 반환하도록 기본 동작이 업데이트되었습니다. 이렇게 하면 ops에 입력된 것과 동일한 순서로 인수를 반환합니다. C++ 순서로 인수를 가져오려면 전역 옵션을 재정의하면 됩니다. 이 변경 사항은 Times, TransposeTimes 및 Gemm(내부) 작업에만 영향을 미칩니다.
LogSoftMax
업데이트했습니다.BatchNormalization
작업 내보내기/가져오기를 최신 사양으로 업데이트했습니다.DepthToSpace
및 SpaceToDepth
작업을 업데이트했습니다.ELU
ONNX op에 alpha
속성 내보내기에 대한 지원이 추가되었습니다.Convolution
및 Pooling
내보내기에 대한 대대적인 점검입니다. 이전과 달리 이러한 작업은 어떤 상황에서도 명시적인 Pad
작업을 내보내지 않습니다.ConvolutionTranspose
내보내기 및 가져오기에 대한 대대적인 점검입니다. output_shape
, output_padding
, pads
와 같은 속성이 완벽하게 지원됩니다.StopGradient
에 대한 지원을 무작동으로 추가했습니다.Hardmax
/ Softmax
/ LogSoftmax
가져오기/내보내기를 수정했습니다.Select
작업 내보내기에 대한 지원이 추가되었습니다.MatMul
op에 대한 CNTK 지원이 업데이트되었습니다.Gemm
op에 대한 CNTK 지원이 업데이트되었습니다.MeanVarianceNormalization
작업 내보내기/가져오기를 최신 사양으로 업데이트했습니다.LayerNormalization
작업 내보내기/가져오기를 최신 사양으로 업데이트했습니다.PRelu
작업 내보내기/가져오기를 최신 사양으로 업데이트했습니다.Gather
작업 내보내기/가져오기를 최신 사양으로 업데이트했습니다.ImageScaler
작업 내보내기/가져오기를 최신 사양으로 업데이트했습니다.Reduce
ops 내보내기/가져오기를 최신 사양으로 업데이트했습니다.Flatten
op 내보내기/가져오기를 최신 사양으로 업데이트했습니다.Unsqueeze
작업에 대한 CNTK 지원이 추가되었습니다.size
속성이 반경이 아닌 직경의 의미를 갖는 ONNX 1.2 사양과 일치하도록 LRN 작업을 업데이트했습니다. LRN 커널 크기가 채널 크기보다 큰 경우 유효성 검사가 추가되었습니다.Min
/ Max
가져오기 구현을 업데이트했습니다.Cntk.Core.Managed 라이브러리는 공식적으로 .Net Standard로 변환되었으며 Windows 및 Linux 모두에서 .Net Core 및 .Net Framework 애플리케이션을 지원합니다. 이번 릴리스부터 .Net 개발자는 패키지 관리 형식이 PackageReference로 설정된 새로운 .Net SDK 스타일 프로젝트 파일을 사용하여 CNTK Nuget 패키지를 복원할 수 있습니다.
다음 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;
예를 들어 .Net Core 애플리케이션의 .csproj 파일에 ItemGroup 절을 추가하는 것만으로도 충분합니다. >>> >>> >>> >>> netcoreapp2.1 >>> x64 >>> >>> >>> >>> >>> >>> >>>
2018-04-16. CNTK 2.5.1
번들에 포함된 타사 라이브러리로 CNTK 2.5를 다시 포장합니다(Python 휠 패키지).
2018-03-15. CNTK 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을 사용한 CPU 추론 성능 개선
cntk.cntk_py.enable_cpueval_optimization()/cntk.cntk_py.disable_cpueval_optimization()
을 통해 켜거나 끌 수 있습니다.1BitSGD가 CNTK에 통합됨
1BitSGD
소스 코드는 이제 Source/1BitSGD/
에서 CNTK 라이센스(MIT 라이센스)로 사용할 수 있습니다.1bitsgd
빌드 타겟이 기존 GPU 타겟에 병합되었습니다.새로운 손실 함수: 계층적 소프트맥스
여러 학습자를 대상으로 한 분산 교육
연산자
MeanVarianceNormalization
연산자가 추가되었습니다.버그 수정
CNTKBinaryFormat
디시리얼라이저의 충돌을 수정했습니다.mpi=no
때 빌드 버그 수정misc.converter.py
의 cntk.convert
API 버그를 수정했습니다.ONNX
ONNX.checker
와 호환됩니다.OptimizedRNNStack
연산자에 대한 ONNX 지원이 추가되었습니다(LSTM만 해당).MeanVarianceNormalization
에 대한 지원이 추가되었습니다.Identity
에 대한 지원이 추가되었습니다.MeanVarianceNormalization
작업을 사용하여 CNTK의 LayerNormalization
레이어 내보내기에 대한 지원이 추가되었습니다.Concat
연산자에서 선택 사항입니다.LeakyReLu
의 이전 버전과의 호환성 버그 수정(인수 'alpha'가 double 유형으로 되돌아감)기타
cntk.logging.graph
아래에 새로운 API find_by_uid()
추가했습니다.2018-02-28. CNTK는 야간 빌드를 지원합니다.
마스터의 최신 CNTK 비트를 사용하려면 CNTK nightly 패키지 중 하나를 사용하세요.
또는 해당 빌드 배지를 클릭하여 야간 빌드 페이지로 이동할 수도 있습니다.
2018-01-31. CNTK 2.4
하이라이트:
OP
top_k
연산: 정방향 패스에서는 지정된 축을 따라 상위(가장 큰) k 값과 해당 인덱스를 계산합니다. 역방향 패스에서 그래디언트는 상위 k개 요소로 분산됩니다(상위 k에 없는 요소는 0의 그래디언트를 얻음).gather
작업은 이제 축 인수를 지원합니다.squeeze
및 expand_dims
작업zeros_like
및 ones_like
작업. 많은 상황에서 간단한 0 또는 1을 올바르게 브로드캐스팅하는 CNTK에 의존할 수 있지만 때로는 실제 텐서가 필요할 수도 있습니다.depth_to_space
: 입력 텐서의 요소를 깊이 차원에서 공간 블록으로 재배열합니다. 이 작업의 일반적인 사용은 일부 이미지 초해상도 모델에 대한 하위 픽셀 컨볼루션을 구현하는 것입니다.space_to_depth
: 입력 텐서의 요소를 공간 차원에서 깊이 차원으로 재배열합니다. 이는 대체로 DepthToSpace와 반대입니다.sum
연산: 입력 텐서의 요소별 합계를 계산하는 새 Function 인스턴스를 만듭니다.softsign
작업: 입력 텐서의 요소별 소프트 사인을 계산하는 새로운 Function 인스턴스를 만듭니다.asinh
연산: 입력 텐서의 요소별 asinh를 계산하는 새 Function 인스턴스를 만듭니다.log_softmax
작업: 입력 텐서의 logsoftmax 정규화된 값을 계산하는 새 Function 인스턴스를 만듭니다.hard_sigmoid
연산: 입력 텐서의 hard_sigmoid 정규화된 값을 계산하는 새 Function 인스턴스를 만듭니다.element_and
, element_not
, element_or
, element_xor
요소별 논리 연산reduce_l1
연산: 제공된 축을 따라 입력 텐서 요소의 L1 노름을 계산합니다.reduce_l2
연산: 제공된 축을 따라 입력 텐서 요소의 L2 노름을 계산합니다.reduce_sum_square
연산: 제공된 축을 따라 입력 텐서 요소의 제곱합을 계산합니다.image_scaler
작업: 개별 값의 크기를 조정하여 이미지를 변경합니다.ONNX
InferredDimension
처리하도록 ONNX Reshape
작업을 업데이트했습니다.producer_name
및 producer_version
필드를 추가합니다.Conv
op에 auto_pad
나 pads
속성이 모두 지정되지 않은 경우를 처리합니다.Pooling
작업 직렬화의 버그 수정InputVariable
생성하는 버그가 수정되었습니다.Transpose
작업 구현에 대한 버그 수정 및 업데이트입니다.Conv
, ConvTranspose
및 Pooling
작업 구현에 대한 버그 수정 및 업데이트입니다.연산자
Convolution
작업의 출력이 변경됩니다. 다음 릴리스에서는 그룹 컨볼루션의 보다 최적화된 구현이 예상됩니다.Convolution
레이어의 그룹 컨볼루션에 대한 오류 보고가 향상되었습니다.할라이드 이진 컨볼루션
netopt
모듈과 함께 사용할 수 있는 Cntk.BinaryConvolution.so/dll
라이브러리를 빌드할 수 있습니다. 라이브러리에는 Python 기반 이진화 회선 연산자보다 더 나은 성능을 발휘하는 최적화된 이진 회선 연산자가 포함되어 있습니다. 빌드에서 Halide를 활성화하려면 빌드를 시작하기 전에 Halide 릴리스를 다운로드하고 HALIDE_PATH
환경 변수를 설정하십시오. Linux에서는 ./configure --with-halide[=directory]
사용하여 활성화할 수 있습니다. 이 기능을 사용하는 방법에 대한 자세한 내용은 How_to_use_network_optimization을 참조하세요.릴리스 노트에서 자세한 내용을 확인하세요. CNTK 릴리스 페이지에서 릴리스를 가져옵니다.