⑴ ps-lite概述
ps-lite旨在构建高可用分布式的机器学习应用。在ps-lite框架中,多个节点运行在多台物理机器上用于处理机器学习问题。通常会运行一个schele节点和多个worker/server节点。、
假设我们想要解决下面的问题:
其中(y i ,x i )是样本集,w是权重。
我们想要通过minibatch随机梯度下降(SGD,其中batch大小是b)的方式来解决这个问题。在时间t时,该算法首先随机挑选b个样本,然后通过下面的公式更新权重w
我们给出两个例子来说明ps-lite实现分布式解决这一问题的基本思想。
在第一个例子中,我们将SGD扩展为异步SGD。我们让server节点来维护w,server k获取到w的第k个分片,标识为w k 。当从worker接收到梯度后,server k会更新它所维护的权重:
方法返回server从任意worker节点接收的梯段, 方法返回时间 时的训练速率。
对于一个worker,每次它都会做四件事情:
ps-lite会提供 和 方法,用于和存有正确部分数据的server进行通信。
异步SGD的语义和单机版本不同。因为单机版本worker之间没有通信,所以就可能导致当一个worker节点正在计算梯度时权重发生变化。换句话说,每个worker都可能正在使用过期的权重。下图展示了2个server节点和3个worker节点的通信过程:
同步SGD的语义与单机算法完全相同,该模式使用scheler来管理数据的同步。
和 发布命令给worker和server,这个过程中 函数会一直等待,指定所有命令发布完成。
当worker接受到命令后,它会执行下面的函数:
这个过程和异步SGD几乎一模一样,只是每次要处理b / num_workers个样本。
而server节点相对于异步SGD还要执行额外的一些步骤:
与单机算法相比,分布式算法增加了两个额外的开销,一是数据通信开销,即通过网络发送数据的开销;另一个是由于不完善的负载均衡和机器性能差异带来的同步开销。这两个开销可能会主宰大规模集群和TB级别数据的应用性能。
假设:
权衡结果如下:
从中我们得到如下结论:
⑵ 如何使用codelite进行单文件编译
在Notepad++中,打开函数列表侧边栏:[视图]菜单>>FunctionList双击其中的项目,即可跳转。注意:要切换到正确的语言,FunctionList才能正常显示函数。必要时要点击其Reload(重新载入)按钮。
⑶ PS-Lite使用
一种调试方式是记录所有的通信日志。可以通过指定 环境变量来实现:
可能会有如下输出
这里 , 和 分别表示scheler,server和worker。
默认情况下PS-Lite会自动选择一个可用的网络接口。但是,对于有多个网络接口的机器,我们可以通过环境变量 来指定网络接口。例如,要使用无限带 接口,我们可以采用如下方式:
如果所有的PS-Lite节点都运行在同一台机器上,我们可以通过设置 来使用内存拷贝取代本地网络接口来提高性能:
如果我们想将PS-Lite移植到除 、 、 和 之外的其它集群资源管理器上,本章将会很有用。
要想启动PS-Lite,我们需要提供为下面的环境变量提供正确的值:
网络传输中出现消息丢失是比较常见的现象,当一个重要的消息传递失败时,程序会挂起。这时,可以让PS-Lite为每一个消息发送一个额外的ACK,如果在指定时间内没有收到ACK,则重传这条消息。要想启动这个功能,我们可以设置下面的环境变量:
⑷ [openharmony]liteos-a系统编译之GN
在 文章 中已经分析openharmony的小型系统(liteos-a)编译过程,最主要的就是调用gn/ninja/makefs三个命令最终生成可烧录的镜像文件
从前面文件可以看到hb build调用的gn命令参数如下
这里详细分析一下gn工具在编译过程中的使用
这里简单介绍下GN工具的使用方法,gn语法可以参考 http://weharmonyos.com/openharmony/compile/gn/docs/
,已经熟悉的可以跳过
从上面图中可以看到使用的命令类型为 gn gen <output_dir> [options] ,此命令就是为了将所有需要的BUILD.gn文件生成为*.ninja文件供ninja进行编译; 可以通过 gn help gen 命令查看详细的用法说明, 如下
下面重点说一下gn_cmd中的 [options]
liteos-a编译系统的dotfile内容如下:
liteos-a是嵌入式系统,而编译环境是linux系统,这就需要用到交叉编译方式,这个就可以在环境配置中指定 target_os 、 target_cpu 、 board_cpu 等等信息
这些信息就是 buildconfig 参数指定的 BUILDCONFIG.gn 文件中配置的
除了以上信息,还配置了以下几个重要信息
详细信息可以查看 //build/lite/config/BUILDCONFIG.gn 文件内容
toolchain定义源码编译需要的工具,像编译器、汇编器、连接器等等,一般在.gn所在目录下有一个 toolchain 目录,里面的 BUILD.gn 定义详细的编译工具链信息
这里目录结构如下:
从结构信息中可以看到定义了clang和gcc两种工具链,通过变量 board_toolchain_type 来区分(此变量也是buildconfig中定义的),具体信息参见BUILD.gn文件内容,如下
在.gn文件所在目录下的BUILD.gn就是入口,此文件做了以下几个事情
这里重点说一下target为 ohos 的 group 如下:
这里也比较好理解,里面就是读取一个配置文件,几级循环来处理配置文件中配置的内容。流程如下
到此就将此board下各模块的依赖关系添加好了,然后 GN 会将依赖树中所有的BUILD.gn生成对应的.ninja文件,并且在out的根目录下生成下面几个ninja的入口文件以及配置文件
⑸ codelite编译显示中文字符为乱码,怎么解决
启用C99,并在控制台显示中文: Settings, Build Settings, gnc gcc, Switchs,在Source选项后面增加" -std=c99 -fexec-charset=GBK ",添加后,Source switch看起来是这样:
-c -std=c99 -fexec-charset=GBK