你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
疑难解答
此页面收集用户遇到的一些最频繁的陷阱。
在训练二进制分类器期间,我总是看到 0 的 ClassificationError,即使第一个微型Batch也是如此
ClassificationError 仅适用于多类问题。 对于二元分类,请使用 这个简单的食谱
尽管模型使用比评估集更大的集训练,但在评估期间CNTK内存不足。
训练模型通常在其CNTK配置文件中设置一个minibatchSize
属性。 使用CNTK.exe评估模型时,请确保 minibatchSize
合适。 若要快速确定此属性是否导致问题,请将该属性设置为低值 (,例如 minibatchSize=2
评估命令的配置文件中的) 。 (cf. 问题 #468)
我在 Linux 上获得 SegFault,其深度网络 (如 ResNet152) 。
可能没有足够的堆栈大小。 BrainScript 需要大量的堆栈。 运行以下命令:ulimit -s 65536。 这将将堆栈大小设置为 64 MB。
出现以下错误:即将引发异常“cuDNN 失败 8:CUDNN_STATUS_EXECUTION_FAILED;GPU=0;hostname=haha;expr=err'
将 minibatchSize 属性设置为较小的值 (,例如 minibatchSize=2
) 。
使用 VS2013/VS2015 编译CNTK时,我会看到编译器错误,错误是什么?
必须升级 Visual Studio 2017。 请参阅此处:在 Windows 上设置CNTK
我启用了支持 zip 的图像读取器,并在运行映像读取器单元测试或尝试使用读取器时收到“找不到插件:”Cntk.Deserializers.Image-.dll“ (旧名称”ImageReader.dll') “错误。 可能有什么问题?
检查是否已正确安装 zlib 和 libzip。
我刚刚下载并安装了CNTK二进制包,并希望运行作业,但遇到奇怪的错误,例如缺少 CUDA 库。
请仔细检查你 PATH
所拥有的内容。 特别是,如果是 共享 开发计算机。 这通常是由旧版 (以前) 版本的CNTK或可通过配置的 PATH 访问的CNTK组件引起的。
在Windows我安装了新版本的 NVIDIA 驱动程序,现在CNTK生成失败,并出现错误,例如 ..\Common\BestGpu.cpp(24): fatal error C1083: Cannot open include file: 'nvml.h': No such file or directory
已在 NVIDIA 驱动程序安装程序中选择 了“执行干净安装 ”选项。 这会导致删除 GPU 部署工具包 (GDK) 。 若要修复系统,请执行以下步骤:
- 启动 CUDA 安装程序
- 选择 “自定义 (高级) 安装
- 取消选择除 GPU 部署工具包以外的所有安装选项
- 这将自动选择 “图形驱动程序 ”选项 - 它应为预期。 将其保留为选中状态
- 继续安装 CUDA
- 成功安装 CUDA 后,启动所需图形驱动程序版本的安装
- 选择 “自定义 (高级) 安装
- 确保未选择“执行清理安装”,并继续安装
初始读取时间需要很长时间 ,或者 我收到以下异常之一:“OS 调用失败或在此 OS 上不支持的操作”或“发生异常:CUSPARSE 失败 1”或堆栈中具有 AllocationFailureHandler 的 Segfault。
此处的一个可能原因是使用默认 ((即无限) 随机化窗口)在内存中加载整个数据集而导致的内存压力过高。 请尝试使用显式 randomizationWindow
值运行工作负荷,这将限制内存中缓存的输入数据量。 为此,请将以下参数添加到 reader
配置部分, (以 10000
示例为例,可以选择适合内存的任何值,并确保) 进行良好的随机化:
randomize=true
randomizationWindow=10000 #(assuming that 10K samples << total available memory)
我在 Azure Web 应用中使用 Eval C# 库时收到错误Cntk.Eval.Wrapper.dll (旧名称EvalWrapper.dll) ,如下所示:“无法加载文件或程序集”某些CNTK DLL“或异常 System.Runtime.InteropServices.SEHException 或”InternalServiceFault:外部组件已引发异常”。
首先,请确保所有CNTK依赖项 DLL 都部署到 Azure Web 应用。
然后,必须将 Azure Web 应用设置为使用 64 位 VM。 若要允许 Azure Web 应用加载CNTK非托管 DLL,应在方法global.asax
中添加Application_Start()
以下代码来更改 PATH 变量:
string pathValue = Environment.GetEnvironmentVariable("PATH");
string domainBaseDir = AppDomain.CurrentDomain.BaseDirectory;
string cntkPath = domainBaseDir + @"bin\";
pathValue += ";" + cntkPath;
Environment.SetEnvironmentVariable("PATH", pathValue);
有关详细步骤,请参阅“在 Azure WebApi 中评估模型”页。
我可以使用 Cntk.Eval-.lib/dll 生成应用程序,但在运行时出现类似于下面的异常
“Microsoft.MSR”类型的未经处理的异常。CNTK。扩展性.Managed.CNTKRuntimeException“发生在 Cntk.Wrapper-.dll
其他信息:配置参数:缺少必需的参数:unknown:modelPath
可能的原因包括:
- 应用程序与
Cntk.Eval-<VERSION>.lib/dll
应用程序之间的不同生成配置 (发布或调试) 。 如果在版本中生成应用程序,请根据版本的发布版本Cntk.Eval-<VERSION>.dll
链接。 调试配置相同。 此错误通常适用于 C++ 应用程序。 - Linux 上的不同GCC编译器版本:
Cntk.Eval
Linux 上的库是使用 GCC 5.4 构建的。 如果对应用程序使用不同的GCC版本,可能会看到上述错误 - modelPath 不正确。 目前,modelPath 必须指定为完整路径。 在 CSEvalClient 示例中,相对路径与当前工作目录相结合,以生成完整路径。 并且 CreateNetwork () 必须传递一个字符串,其中包含指定模型的文件路径的“modelPath=”属性。 目前,模型路径不支持映射驱动器。
我收到以下结果,CNTKTextFormat-Reader - 警告:在读取偏移量浮点值时,用尽当前序列预期的所有输入
CTF 读取器 要求每个格式良好的行必须以“换行符”\n或“回车符、换行符”\r\n符号结尾, (包括文件) 的最后一行。