小编Dal*_*yaG的帖子

是否可以编写一个容忍失败的子任务的 luigi 包装器任务?

我有一个执行一些不稳定计算的 luigi 任务。想想有时不收敛的优化过程。

import luigi

MyOptimizer(luigi.Task):
    input_param: luigi.Parameter()
    output_filename = luigi.Parameter(default='result.json')

    def run(self):
        optimize_something(self.input_param, self.output().path)

    def output(self):
        return luigi.LocalTarget(self.output_filename)
Run Code Online (Sandbox Code Playgroud)

现在我想构建一个包装器任务,该任务将使用不同的输入参数多次运行此优化器,并获取收敛的第一次运行的输出。

我现在实现它的方式是使用,MyOptimizer因为如果它失败,luigi 会认为包装器任务也失败了,但我可以接受一些MyOptimizer失败的实例。

MyWrapper(luigi.Task):
    input_params_list = luigi.ListParameter()
    output_filename = luigi.Parameter(default='result.json')

    def run(self):
        for input_param in self.input_params_list:
            try:
                optimize_something(self.input_param, self.output().path)
                print(f"Optimizer succeeded with input {input_param}")
                break
            except Exception as e:
                print(f"Optimizer failed with input {input_param}. Trying again...")

    def output(self):
        return luigi.LocalTarget(self.output_filename)
Run Code Online (Sandbox Code Playgroud)

问题在于,通过这种方式,任务不会并行化。此外,您可以想象MyOptimizeroptimize_something参与由 luigi 处理的数据管道的复杂任务,这在我的代码中造成了相当多的混乱。

我将不胜感激有关如何以类似路易吉的方式进行这项工作的任何见解和想法:)

python error-handling dataflow luigi data-pipeline

13
推荐指数
1
解决办法
265
查看次数

ClearML(以前称为 Trains)可以在本地服务器上运行吗?

我正在尝试从ClearML(以前称为 Trains)开始我的道路。

我在文档中看到我需要运行服务器,无论是在 ClearML 平台本身上,还是在使用 AWS 等的远程计算机上。

我真的很想绕过这个限制并在本地计算机上运行实验,而不连接到任何远程目的地。

根据this我可以trains-server在任何远程机器上安装它,所以理论上我也应该能够在我的本地机器上安装它,但它仍然需要我有Kubernetes或Docker,但我没有使用它们中的任何一个。

有人在本地服务器上使用过 ClearML(或 Trains,我认为它仍然是完全相同的 API 等)吗?

  • 我的操作系统是 Ubuntu 18.04。

trains clearml

6
推荐指数
1
解决办法
1921
查看次数

Luigi:有没有办法从命令行将“false”传递给 bool 参数?

我有一个默认Luigi设置为True的布尔参数的任务:

class MyLuigiTask(luigi.Task):
    my_bool_param = luigi.BoolParameter(default=True) 
Run Code Online (Sandbox Code Playgroud)

当我从终端运行此任务时,有时我想将该参数作为False传递,但得到以下结果:

$ MyLuigiTask --my_bool_param False
error: unrecognized arguments: False  
Run Code Online (Sandbox Code Playgroud)

显然对于false0...

我知道我可以将默认设置为False,然后--my_bool_param如果我想设置为True,则使用该标志,但我更喜欢使用默认值True

有什么办法可以做到这一点,并且仍然从终端传递False

python terminal luigi

5
推荐指数
1
解决办法
850
查看次数