Posts

Showing posts from 2019

Microsoft实习手记第三篇 Kubeflow部署

Image
0. 本文记录一下如何把kubeflow部署在一个已有的k8s集群上 1. 配置~/.kube/config ,保证kubectl 能访问到目标cluster 2. 这里用的kfctl v0.5.1  https://github.com/kubeflow/kubeflow/tree/v0.5-branch  来deploy kubeflow kfctl 现在(2019/7/12) 使用非常不稳定,command 执行参数也经常改动,并且和教程并不匹配 https://github.com/kubeflow/website/commit/3a307d0a7689ee0863b83aa3de0d4ad6922d99db#diff-fe297c0331c2049d61d5c1972e94abfaR78 我这里参照的是3a307d0a7689ee0863b83aa3de0d4ad6922d99db这个commit之前的官方教程 kfctl 通过这个链接来wget 然后tar xvf 解压 https://github.com/kubeflow/kubeflow/releases/download/v0.5.1/kfctl_v0.5.1_linux.tar.gz 3. export KFAPP=folder_to_your_local_target_folder kfctl init \${KFAPP} # 这里看到在目标文件夹会多一个app.yaml文件,可以通过编辑它来改目标的namespace cd ${KFAPP} kfctl generate all -V # 这步我在k8s的node集群之外,比如本机的终端运行会有报错。但是在我ssh上去再跑就ok了。 不知道什么原因 kfctl apply all -V 4. 这样在k8s集群上的kubeflow(默认是这个namespace) 就部署起来了 接下来通过端口转发来通过浏览器访问kubeflow export NAMESPACE=kubeflow kubectl.exe port-forward svc/ambassador -n ${NAMESPACE} 8080:80 http://localhost:8080/ 5. 通过查

Microsoft实习手记第二篇 Distributed Tensorflow

Image
分布式机器学习目前主要有两种实现: Allreduce 和 参数服务器 差别主要在于参数的更新同步模式,Allreduce中各个机器的参数是同步更新的(synchronized),参数服务器的话可以选择BSP ASP SSP各种同步模式[1]。 目前我所接触的工业界想要做的是用参数服务器做数据并行。 Tensorflow的API经常变更,现在也处于一个2.0在beta测试的时间节点。很多设计以及API都在一个更迭时期。这里记录一下怎么在一个分布式环境下用Tensorflow实现参数服务器,本文不会讨论对参数服务器的优化,背后原理,收敛证明等。(本文保质期会很短)

Microsoft实习手记第一篇 Kubernetes

Image
0x00 在实习的第一个Sprint,了解了组里的业务,我这块主要建立在k8s集群上,在这个之上构建分布式机器学习的平台。 由于之前只接触过本机的docker,一时之间触及k8s集群还是有点懵,这里记录些工具和概念。 0x01 概念 k8s集群中的机器们被分成两种 Master Server 和 Kubernetes Node. ref:  https://www.cnblogs.com/menkeyi/p/7134460.html “Node是Kubernetes中的工作节点,最开始被称为minion。一个Node可以是VM或物理机。每个Node(节点)具有运行 pod 的一些必要服务,并由Master组件进行管理,Node节点上的服务包括Docker、kubelet和kube-proxy” ----say by  here 这里引入了一个新的概念Pod。 一言以蔽之:“Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程” ----say by here 这里的Pod里面运行着具体的container,终于触碰到我的已有认知了,这里的container就是docker概念里的那个,通过image产生的实例. Pod : 为什么说Pod是k8s创建或部署的最小单位呢?因为它不直接控制container。一个pod可以包含一个或者多个container,然后k8s直接控制的是pod。在我接触的case中,一个pod包含了多个container,其中一个是负责业务逻辑的,另外的会负责pull data, pull code dependancy..., 以及挂载存储等等。 因为单个pod是一个脆弱的资源,可能因为某些原因crash。对于集群来说需要有个东西来维护它的扩展,重启等等事情。这部分工作不是pod自己来做的,而是交给Controller。 Controller : 可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。例如,如果一个Node故障,Controller就能自动将该节点上的Pod调度到其他健康的Node上。包含一个或者多个Pod的Controller示例: Deployment StatefulSet Daem

反向传播公式推导

Image
在计算机科学家(也很可能是数学家)在提出DL在计算机上可行的时候,(我相信) 算力友好的计算Cost functon 对每个参数的导数($\frac{\partial C}{\partial w_{j k}^{l}}$ 和 $\frac{\partial C} { \partial b_{j}^{l}}$)是非常重要的一点。 符号表示 为此,这里引入了中间变量$\delta_{j}^{l}$ 定义为在$l^{th}$层的第$j^{th}$个神经元上的误差: $\delta_{j}^{l} \equiv \frac{\partial C}{\partial z_{j}^{l}}$ 这里$z_j^l$指的是第$l^{th}$层的第$j^{th}$个神经元的激活函数的带权输入: $z_{j}^{l}=\sum_{k} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l}$ 看起来更直观的做法可能会把激活函数输出作为引入变量来推导,但是事实是用$z_j^l$来表示会更方便。 从$\delta_j^L$ 出发: 大写的$L$表示最后一层,即输出层的误差,计作BP1 $\delta_{j}^{L}=\frac{\partial C}{\partial a_{j}^{L}} \sigma^{\prime}\left(z_{j}^{L}\right)$ BP1 是按分量构成的表达式,如果重写为用矩阵表示,计作BP1a,即: $\delta^{L}=\nabla_{a} C \odot \sigma^{\prime}\left(z^{L}\right)$ 其中$\nabla_{a}C$ 是一个向量,元素为$ \partial C / \partial a_{j}^{L} $   既然最后一层的误差已经可以表示,那对于中间层呢? 先给出结论,下式记作BP2 : $\delta^{l}=\left(\left(w^{l+1}\right)^{T} \delta^{l+1}\right) \odot \sigma^{\prime}\left(z^{l}\right)$ 证明: BP2的核心就是把$\delta_j^l$ 和 $\delta_j^{l+1}$ 关联起来,证明

牛顿法以及用牛顿法求极值

Image
牛顿法 牛顿法经常作为一个和梯度下降做对比的求解机器学习收敛结果的方法。需要明确的是首先牛顿法本身是作为求解函数零点问题的一种方法。具体做法是:当想要求解  $ f(\theta)=0 $ 时,如果$f$可导,那么可以通过迭代公式: $ \theta :=\theta-\frac{f(\theta)}{f^{\prime}(\theta)} $ 来迭代求得零点。 需要注意的是,牛顿法根据选取的初始值的不同,有可能会不收敛!通常选取在零点附近作为初始值。 牛顿法求函数零点 牛顿法之所以能work,是因为利用了泰勒展开。 我们把$ f(x)=0 $在$x_0$处展开且展开到一阶,得到$f(x)=f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)$  所以目标就变成了要让:$f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)=0$ 所以就变成了:$x=x_{1}=x_{0}-\frac{f\left(x_{0}\right)}{f^{\prime}\left(x_{0}\right)}$ 因为$f(x)=f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)$ 并非处处相等,而是只在$x_0$附近可以这么认为,这里求得的$x_1$并不能让$f(x) = 0$,只能说$f(x_1)$的值比$f(x_0)$更接近于0,所以这就可以用迭代来逼近了! 这里来插入一下如果自变量不是一个单变量的泰勒展开式,假设函数$f(x,y)$ 那么它在$(x0,y0)$处的一阶泰勒展开计作$L(x,y)$写作: $L(x,y) = f(x_0,y_0) + f_x(x_0,y_0)*(x-x_0) + f_y(x_0,y_0)*(y-y_0)$ 牛顿法求极值 在机器学习中,问题就不是求零点,而是希望求loss function的最小值,于是可以写作求$\ell^{\prime}(\theta)=0$ 同理,这种情况下的迭代过程就是: $ \theta :=\theta-\

Malware Report: iauzzy.exe

Image
Malware report of iauzzy.exe Summary This malware will create a file named ‘qqt.exe’ under the %WinDir%. This is the exact malicious executable file. qqt.exe is able to communicate to the ‘Command & Control’ server via IRC. The controller behind is able to execute any code; reboot the infected machine; clean the malware itself, etc.

Malware Report: withme.exe

Image
Malware Report withme.exe Summary This Withme.exe will drop a executable file ‘A-1980682553.exe’ to the location %AppData%. Also It will add itself to runonce registry. This is the exact malware. It’s able to communicate with C2 server, which domain is ‘sexwithme.info’ wia port 6667.