提交 a7a82b91 编写于 作者: T Tao Luo 提交者: GitHub

Merge pull request #4363 from tensor-tang/sgd

add OMP SGD to speedup with CPUs
...@@ -20,7 +20,7 @@ Docker使用入门 ...@@ -20,7 +20,7 @@ Docker使用入门
docker pull paddlepaddle/paddle:0.10.0 docker pull paddlepaddle/paddle:0.10.0
来下载Docker镜像,paddlepaddle/paddle是从官方镜像源Dockerhub.com下载的,推荐国内用户使用ocker.paddlepaddle.org/paddle下载。 来下载Docker镜像,paddlepaddle/paddle是从官方镜像源Dockerhub.com下载的,推荐国内用户使用docker.paddlepaddle.org/paddle下载。
- *容器*: 如果说一个Docker镜像就是一个程序,那容器就是这个程序运行时产生的“进程”。 - *容器*: 如果说一个Docker镜像就是一个程序,那容器就是这个程序运行时产生的“进程”。
实际上,一个容器就是一个操作系统的进程,但是是运行在独立的进程空间,文件系统以及网络之上。 实际上,一个容器就是一个操作系统的进程,但是是运行在独立的进程空间,文件系统以及网络之上。
......
...@@ -15,6 +15,7 @@ limitations under the License. */ ...@@ -15,6 +15,7 @@ limitations under the License. */
#pragma once #pragma once
#include "ParameterOptimizer.h" #include "ParameterOptimizer.h"
#include "ParameterUpdateFunctions.h"
#include "Regularizer.h" #include "Regularizer.h"
namespace paddle { namespace paddle {
...@@ -37,6 +38,15 @@ public: ...@@ -37,6 +38,15 @@ public:
real torch_learningRate = optConfig_.learning_method() == "torch_momentum" real torch_learningRate = optConfig_.learning_method() == "torch_momentum"
? 1.0 - paraConfig.momentum() ? 1.0 - paraConfig.momentum()
: 1.0; : 1.0;
#ifdef PADDLE_USE_MKLDNN
sgdUpdate(learningRate_ * paraConfig.learning_rate() *
(firstTime_ ? 1.0 : torch_learningRate),
paraConfig.momentum(),
applyDecay_ ? paraConfig.decay_rate() : 0,
vecs[PARAMETER_VALUE].get(),
vecs[PARAMETER_GRADIENT].get(),
vecs[PARAMETER_MOMENTUM].get());
#else
vecs[PARAMETER_VALUE]->sgdUpdate( vecs[PARAMETER_VALUE]->sgdUpdate(
*vecs[PARAMETER_GRADIENT], *vecs[PARAMETER_GRADIENT],
*vecs[PARAMETER_MOMENTUM], *vecs[PARAMETER_MOMENTUM],
...@@ -44,6 +54,7 @@ public: ...@@ -44,6 +54,7 @@ public:
(firstTime_ ? 1.0 : torch_learningRate), (firstTime_ ? 1.0 : torch_learningRate),
paraConfig.momentum(), paraConfig.momentum(),
applyDecay_ ? paraConfig.decay_rate() : 0); applyDecay_ ? paraConfig.decay_rate() : 0);
#endif
} }
virtual void finishBatch() { firstTime_ = false; } virtual void finishBatch() { firstTime_ = false; }
}; };
......
...@@ -30,6 +30,9 @@ void sgdUpdateCpu(real learningRate, ...@@ -30,6 +30,9 @@ void sgdUpdateCpu(real learningRate,
const real* grad, const real* grad,
real* momentumVec) { real* momentumVec) {
decayRate *= learningRate; decayRate *= learningRate;
#ifdef PADDLE_USE_MKLDNN
#pragma omp parallel for
#endif
for (size_t i = 0; i < size; ++i) { for (size_t i = 0; i < size; ++i) {
momentumVec[i] = momentum * momentumVec[i] - learningRate * grad[i] - momentumVec[i] = momentum * momentumVec[i] - learningRate * grad[i] -
decayRate * value[i]; decayRate * value[i];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册