【问题标题】:CNTK: Python vs C# API for model consumptionCNTK:用于模型消费的 Python vs C# API
【发布时间】:2017-01-12 02:23:35
【问题描述】:

我们使用 CNTK 训练了一个模型。我们正在构建一个服务,该服务将加载此模型并响应对句子进行分类的请求。在性能方面使用的最佳 API 是什么?我们更愿意在https://github.com/Microsoft/CNTK/tree/master/Examples/Evaluation/CSEvalClient 中构建一个 C# 服务,但或者我们正在考虑构建一个 Python 服务,它将在 python 中加载模型。

您对其中一种方法有什么建议吗? (关于哪个 API 更快、更积极地维护或您能想到的其他参数)。下一步是建立一个测量两个 API 调用性能的实验,但想知道这里是否有一些先验知识可以帮助我们做出决定。

谢谢

【问题讨论】:

标签: cntk


【解决方案1】:

这两个 API 都得到了很好的开发/维护。对于文本数据,我会使用 C# API。

在 C# 中,主要关注点是快速和简单的评估,并且对于文本加载数据非常简单。

Python API 非常适合模型的开发/训练,目前还没有太多关注评估。此外,由于大量的包以奇异格式加载数据,因此在 Python 中比 C# 更容易。

【讨论】:

  • 感谢您的回复。我在github.com/Microsoft/CNTK/wiki/EvalDLL-Evaluation-Overview 看到以下内容:“单线程评估 CNTK 评估库以及托管的 EvalWrapper 库是单线程和单重入库。这意味着单个模型只能由单个线程在一次。但是,可以在同一个进程中加载​​多个模型并使用单个线程查询每个模型。单线程限制是否适用于 python 评估 API?
  • 很抱歉,这里有两个不同的 C# 评估 API:github.com/Microsoft/CNTK/wiki/CNTK-Evaluation-Overview 我有兴趣支持通过多线程并行评估多个请求,但似乎不可能C#(正在开发中)
【解决方案2】:

基于 CNTKLibrary 的新 C# Eval API 即将推出(第一个测试版可能在下周)。此 API 在评估方面与 C++ 和 Python API 的功能相同。

该API支持使用多个线程并行服务多个评估请求,更好的是,相同加载模型的模型参数在这些线程之间共享,这将显着减少服务环境中的内存使用。

我们还有一个turorial 关于如何在 ASP.Net 环境中使用 Eval API。它仍然是指 EvalDLL 评估,但也适用于新的 C# API。该文档将在新的 C# API 发布后更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    相关资源
    最近更新 更多