我目前正在Azure ML Studio中的CommonCrawl新闻数据集上训练Top2Vec ML模型。当在ML Studio本身(在线)中的ipynb Notebook中运行我的Python代码时,CPU被完全使用(100%工作负载),但是当在作业中执行我的脚本作为任务时,CPU利用率(监控)不会超过25%。
我注意到完整JSON作业定义中的“containerInstance”部分包含此容器示例的资源设置,其配置方式如下:
"containerInstance": {
"region": null,
"cpuCores": 2,
"memoryGb": 3.5
}
然而,我不知何故无法启动一个超过2个cpu核心和3.5 GB RAM的作业。我的计算机是STANDARD_F4S_V2示例,具有4个vCPU和8 GB RAM。因此,我希望我的容器示例使用所有可用资源,而不是仅使用50%。
这是我用来训练模型的超参数:
hyperparameters = {
'min_count': 50,
'topic_merge_delta': 0.1,
'embedding_model': 'doc2vec',
'embedding_batch_size': 32,
'split_documents': False,
'document_chunker': 'sequential',
'chunk_length': 100,
'chunk_overlap_ratio': 0.5,
'chunk_len_coverage_ratio': 1,
'speed': 'learn',
'use_corpus_file': False,
'keep_documents': True,
'workers': 4,
'verbose': True
}
是否可以编辑containerInstance
选项?我看到我可以配置“每个节点的进程数”,但这听起来像我的脚本应该并行执行多少次。
1条答案
按热度按时间euoag5mw1#
我终于找到了问题的根源。这不是由于Docker容器示例没有使用所有核心,而是由于我的Python脚本。我的脚本依赖于Python的
threading
库来确保并行执行,但当时我并不知道GIL(全局解释器锁)只允许一个线程控制Python解释器,这当然让我对Python中的线程有了一点理解。在用multiprocessing
库重写我的脚本后,Docker容器示例使用了所有可用的资源。尽管如此,如果您计划手动定义CPU核心数量和RAM数量,则可以使用下面的Python脚本启动自定义Azure ML作业: