我们都知道机器学习工具和云服务是通过浏览器工作的,它们为我们提供了一个界面,我们可以用它来执行日常数据分析、模型培训、评估和其他不同程度的高效任务。
但是,如果您想在本地计算机或组织中可用的基础架构上运行这些任务,您会怎么做?而且,如果这些可用的资源不能满足先决条件,那么就要做好端到端的数据科学或机器学习任务。那时,就可以访问与云提供商无关的深度学习管理环境,例如Valohai可以帮忙。此外,我们将使用free-tier任何人都可以接触到。
你可能还喜欢:How to Create Java NLP Apps Using Google NLP API我们将执行构建一个Java应用程序的任务,然后使用它来训练和评估一个自然语言处理模型,我们将在命令行界面上完成所有的工作,减少可用web界面之间的交互——基本上,这将是一个端到端的过程,一直到训练、保存和评估自然语言处理模型。我们不需要太担心设置、配置或管理任何环境。
在这篇文章中,我们将学习做一些事情,特别是涵盖不同层次的抽象(没有特别的顺序):
以下是我们需要开始的内容:
这怎么这项任务的一部分并不难。一旦我们明确了我们的目标和要求,我们将在下面的章节中对此进行扩展。
我们有开始这篇文章所需的所有代码和说明captured for you on GitHub。以下是熟悉该项目所需的步骤。
要快速开始,我们需要做的只是:
$ git clone https://github.com/valohai/dl4j-nlp-cuda-example/
$ cd dl4j-nlp-cuda-example
$ vh project create
$ vh project open
### Go to the Settings page > Repository tab and update the git repo address
### with https://github.com/valohai/dl4j-nlp-cuda-example/
$ vh project fetch
现在,您已经准备好开始使用从命令行执行机器学习任务的能力了。
参见Advanced installation and setup section in the README为了找出我们需要在你的系统上安装和配置什么,以便在你的本地机器上或Docker容器内运行应用程序和实验——这对于这篇文章来说不是必须的,但是你可以在以后尝试一下。
你会注意到我们有一个valohai.yaml在git回购和我们的valohai.yaml文件包含几个您可以使用的步骤。我们通过他们的名字来招募他们,我们将在运行我们的步骤时使用这些名字:
假设您都设置好了,我们将从在Valohai平台,这就像运行两个命令之一一样简单:
$ vh exec run build-cpu-gpu-uberjar [--adhoc]
### Run `vh exec run --help` to find out more about this command
然后,系统会提示您执行计数器,该计数器不是数字:
<--snipped-->
�� Success! Execution #1 created. See https://app.valohai.com/p/valohai/dl4j-nlp-cuda-example/execution/016dfef8-3a72-22d4-3d9b-7f992e6ac94d/
注意:使用--adhoc
仅当您尚未设置Valohai使用git repo的项目或有未保存的提交,并希望在确定配置之前进行实验。
您可以通过以下方式观看执行过程:
$ vh watch 1
### the parameter 1 is the counter returned by the
### `vh exec run build-cpu-gpu-uberjar` operation above,
### it is the index to refer to that execution run
您可以看到,要么我们正在等待分配一个实例,要么当执行开始时,控制台消息越过屏幕。你也可以通过网络界面看到同样的情况。
注意:实例的可用性取决于它们的受欢迎程度,以及您在它们上面还剩多少配额。如果它们是最近才使用的,那么它们很可能是下一个可用的。
一旦这个步骤完成,您可以看到它产生了一些工件,在Valohai术语。我们可以通过以下方式看到它们:
$ vh outputs 1
### Run `vh outputs --help` to find out more about this command
我们需要看起来像datum://[....some sha like notation...]
我们接下来的步骤。您可以看到,我们有一个日志文件,它捕获了关于运行实例的图形处理器相关信息。您可以通过以下方式下载该文件:
$ vh outputs --download . --filter *.logs 1
### Run `vh outputs --help` to find out more about this command
我们将使用构建好的工件,即用于中央处理器和图形处理器后端的超级震击器来运行我们的训练过程:
### Running the CPU uberjar
$ vh exec run train-cpu-linux --cpu-linux-uberjar=datum://016dff00-43b7-b599-0e85-23a16749146e [--adhoc]
### Running the GPU uberjar
$ vh exec run train-gpu-linux --gpu-linux-uberjar=datum://016dff00-2095-4df7-5d9e-02cb7cd009bb [--adhoc]
### Note these datum:// link will vary in your case
### Run `vh exec run train-cpu-linux --help` to get more details on its usage
注意:看看Inputs with Valohai CLI文档来看看如何编写像上面这样的命令。
如果我们愿意,我们可以观察这个过程,但是可能会很长,所以我们可以换到另一个任务。
上面的执行以将模型保存到${VH_OUTPUTS}
文件夹,以便存档Valohai。模型名称有后缀,以记录它们是如何产生的。
在构建、培训或评估步骤的任何时候,我们都可以通过执行以下操作来停止正在进行的执行(排队或运行):
$ vh stop 3
(Resolved stop to execution stop.)
⌛ Stopping #3...
=> {"message":"Stop signal sent"}
�� Success! Done.
我们可以查询outputs
并使用以下命令下载:
$ vh outputs 2
$ vh outputs --download . --filter Cnn*.pb 2
看看你怎么样can evaluate the downloaded model on your local machine,这两个模型都是由 CPU-还有GPU基于流程(各自的超级罐子)。只需将下载模型的名称作为参数传递给runner shell script提供。
### Running the CPU uberjar and evaluating the CPU-verion of the model
$ vh exec run evaluate-model-linux --uber-jar=datum://016dff00-43b7-b599-0e85-23a16749146e --model=datum://016dff2a-a0d4-3e63-d8da-6a61a96a7ba6 [--adhoc]
### Running the GPU uberjar and evaluating the GPU-verion of the model
$ vh exec run evaluate-model-linux --uber-jar=datum://016dff00-2095-4df7-5d9e-02cb7cd009bb --model=datum://016dff2a-a0d4-3e63-d8da-6a61a96a7ba6 [--adhoc]
### Note these datum:// link will vary in your case
### Run `vh exec run train-cpu-linux --help` to get more details on its usage
在模型评估结束时,在模型上运行测试集后,我们得到以下模型评估指标和混淆矩阵:
注:该source code在不同阶段以内嵌注释的形式包含了与语言学习和自然语言处理相关的解释。
这一步与在云上构建和运行一个Java应用程序以及使用客户端工具远程控制和查看它的整个过程无关。但是,能够知道我们在什么样的系统上运行我们的培训是很有用的,尤其是对于培训的图形处理器方面:
$ vh exec run know-your-gpus [--adhoc]
### Run `vh exec run --help` to get more details on its usage
在写这篇文章的时候,我做了几个实验,为了有效地记录成功和失败的实验,我可以使用Valohai的版本控制设施,通过以下方式融入其设计:
我们可以从以下几个方面讨论基于中央处理器和基于图形处理器的进程之间的比较:
但是我们不会在这篇文章中讨论这些话题,尽管你可以获得你需要的度量标准,以防你想进一步调查。
所有必要的脚本都可以在GitHub repo在:
也请看看README.md关于它们的用法和其他我们在这篇文章中没有提到的附加信息的更多细节,请存档。
如果我们注意到以上所有任务都是通过几个不同抽象层次的工具来组织任务的:
您正在从一个点开始编排您的任务,利用可用的工具和技术来完成各种数据和机器学习任务。
我们已经看到自然语言处理是一项耗费资源的任务,掌握正确的方法和工具肯定会有所帮助。再一次,那个DeepLearning4J来自的库Skymind以及Valohai站台已经来帮助我们了。感谢两个平台的创造者!下面,我们可以看到这篇文章提供的好处(以及更多)。
我们从上述实验中获益匪浅,包括:
我觉得很有效率,在做上述所有事情的时候,我的时间和资源都得到了有效的利用。但最重要的是,我可以与他人分享,每个人都可以重用我的辛勤工作——只是clone the repo和你走吧!
我们没有谈到的,也可能是一个很好的话题是Valohai Pipelines!敬请关注未来的帖子!
这篇博文最初发表于https://blog.valohai.com。