Ray 学习笔记,日志

本系列是作者用 python 学习 Ray 框架的笔记。 Ray 是 UC berkley 提出的分布式机器学习。sklearn 是运行在单机上的机器学习,虽然支持多线程,但分布式并不支持。如果读者不熟悉Ray,本篇文章不适合新手上路,可以学习文章后尾的两篇文献。刚上手学习Ray,自然要想着怎样加埋点,怎样写日志。

写埋点,既可以用print命令,也可以用loggin模块。一般而言,对于ray都工作,但当线程中断,睡眠后,再唤醒,print和logging就不工作。这个问题得到了解决。 可以看文末的解决代码。 目前的ray版本是1.2.

先看原码,

import ray
import time

ray.init();

@ray.remote
def f():
    a = 3;
    print("before print",flush=True);
    time.sleep(1);
    print("after print",flush=True);
    time.sleep(2);
    print("end",flush=True);
    return 1;

for _ in range(3):
     f.remote()

运行源码,结果只有如下所示:

2021-03-12 16:00:58,577 INFO services.py:1092 -- View the Ray dashboard at http://127.0.0.1:8265
(pid=49020) before print
(pid=49021) before print
(pid=49022) before print

第二个print,第三个print都没有显示出打印结果,该问题被ray的forum提及,但目前(2021年3月12日)还没有跟进解决方案,只是大家尽量避开。该问题已经在2021年4月25日得到解决。 作者也在StackOverflow上回复了相同问题

Ray 的入门学习材料:

- [学习Ray 之前必读,quick tutorial on ray]

- [A Gentle Introduction to Ray]

后续

1. 该问题,已经被具体,代码需要符合ray的运行机制。工作的代码如下:

import ray
import time

ray.init();

@ray.remote
def f():
    a = 3;
    print("before print",flush=True);
    time.sleep(1);
    print("after print",flush=True);
    time.sleep(2);
    print("end",flush=True);
    return 1;

f_handles =[f.remote() for _ in range(3)]
ray.get(f_handles)

编辑历史:

1. 本博客在2021年4月25日被更新,编辑。该问题已经被解决,解决原因是一般python运行语法不符合ray运行机制。

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值