首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Talos并行化GridSearch扫描

如何使用Talos并行化GridSearch扫描
EN

Stack Overflow用户
提问于 2019-05-07 10:41:27
回答 1查看 225关注 0票数 2

虽然talos支持GPU并行化,但如何扩展扫描对象以支持CPU + GPU并行化?

EN

回答 1

Stack Overflow用户

发布于 2019-05-07 11:21:37

遵循将扫描实验分解为多个进程的方法:

代码语言:javascript
复制
import multiprocessing as mp
from itertools import product
import talos
import os

# Helper function to create configuration chunks
def chunkify(lst, n):
    return [lst[i::n] for i in range(n)]

# a Talos Scan Configuration superset
playbook_configurations = {
    "input_lstm_dim": [5, 15, 30, 50],
    "dense_a_dim": [None, 5],
    "dense_b_dim": [None, 5],
    "dense_c_dim": [None, 5],
    "dropout_a_rate": [None, 0.7, 0.5, 0.3],
    "epochs": [100],
    "verbose": [verbose_flag],
    "batch_normalization": [None, 1]
}

# Threadsafe Queue for scan results
output = mp.Queue()

# Actual scan to run within each process
def process_scan(playbook_scan_settings, output):
    scan = talos.Scan(
        ...
        params=playbook_scan_settings,
    )
    ...
    output.put(results) # pump results onto queue

# Sample Process count based on core affinity
cpu_count = len(os.sched_getaffinity(0))

# Cartesian product of Talos Configuration
playbook_configurations_cartesian_product = [dict(zip(playbook_configurations, v)) for v in product(
    *playbook_configurations.values())]

# Configuration chunks to assign to each process
playbook_configuration_groups = chunkify(
    playbook_configurations_cartesian_product, cpu_count)

processes = []
for playbook_configuration_group in playbook_configuration_groups:
    # merged (array) configuration for process group
    playbook_scan_settings = {}
    for g in playbook_configuration_group:
        for k, v in g.items():
            if not k in playbook_scan_settings:
                playbook_scan_settings[k] = []
            if not v in playbook_scan_settings[k]:
                playbook_scan_settings[k].append(v)
    if bool(playbook_scan_settings):
        # process to scan on merged configuration for process group
        processes.append(mp.Process(
            target=process_scan, args=(playbook_scan_settings, output)))

for p in processes:
    p.start()
for p in processes:
    p.join()

# Will be the result from the message queue
results = [output.get() for p in processes]

您可以轻松地将报告对象、获胜模型和每个扫描层的指标放入消息队列中进行最终选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56014794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档