Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
nni
Commits
4320da81
Commit
4320da81
authored
Sep 04, 2019
by
Guoxin
Committed by
QuanluZhang
Sep 04, 2019
Browse files
Mnist torch example (#1522)
* add mnist pytorch example, change links in readme for mnist example
parent
871f031d
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
347 additions
and
2 deletions
+347
-2
README.md
README.md
+2
-2
examples/trials/mnist-pytorch/config.yml
examples/trials/mnist-pytorch/config.yml
+21
-0
examples/trials/mnist-pytorch/config_assessor.yml
examples/trials/mnist-pytorch/config_assessor.yml
+29
-0
examples/trials/mnist-pytorch/config_frameworkcontroller.yml
examples/trials/mnist-pytorch/config_frameworkcontroller.yml
+41
-0
examples/trials/mnist-pytorch/config_kubeflow.yml
examples/trials/mnist-pytorch/config_kubeflow.yml
+32
-0
examples/trials/mnist-pytorch/config_pai.yml
examples/trials/mnist-pytorch/config_pai.yml
+32
-0
examples/trials/mnist-pytorch/config_windows.yml
examples/trials/mnist-pytorch/config_windows.yml
+21
-0
examples/trials/mnist-pytorch/mnist.py
examples/trials/mnist-pytorch/mnist.py
+161
-0
examples/trials/mnist-pytorch/requirements.txt
examples/trials/mnist-pytorch/requirements.txt
+2
-0
examples/trials/mnist-pytorch/search_space.json
examples/trials/mnist-pytorch/search_space.json
+6
-0
No files found.
README.md
View file @
4320da81
...
@@ -70,8 +70,8 @@ The tool dispatches and runs trial jobs generated by tuning algorithms to search
...
@@ -70,8 +70,8 @@ The tool dispatches and runs trial jobs generated by tuning algorithms to search
<ul>
<ul>
<li><b>
Examples
</b></li>
<li><b>
Examples
</b></li>
<ul>
<ul>
<li><a
href=
"examples/trials/mnist-
distributed-
pytorch"
>
MNIST-pytorch
</li></a>
<li><a
href=
"examples/trials/mnist-pytorch"
>
MNIST-pytorch
</li></a>
<li><a
href=
"examples/trials/mnist
-distributed
"
>
MNIST-tensorflow
</li></a>
<li><a
href=
"examples/trials/mnist"
>
MNIST-tensorflow
</li></a>
<li><a
href=
"examples/trials/mnist-keras"
>
MNIST-keras
</li></a>
<li><a
href=
"examples/trials/mnist-keras"
>
MNIST-keras
</li></a>
<li><a
href=
"docs/en_US/TrialExample/GbdtExample.md"
>
Auto-gbdt
</a></li>
<li><a
href=
"docs/en_US/TrialExample/GbdtExample.md"
>
Auto-gbdt
</a></li>
<li><a
href=
"docs/en_US/TrialExample/Cifar10Examples.md"
>
Cifar10-pytorch
</li></a>
<li><a
href=
"docs/en_US/TrialExample/Cifar10Examples.md"
>
Cifar10-pytorch
</li></a>
...
...
examples/trials/mnist-pytorch/config.yml
0 → 100644
View file @
4320da81
authorName
:
default
experimentName
:
example_mnist_pytorch
trialConcurrency
:
1
maxExecDuration
:
1h
maxTrialNum
:
10
#choice: local, remote, pai
trainingServicePlatform
:
local
searchSpacePath
:
search_space.json
#choice: true, false
useAnnotation
:
false
tuner
:
#choice: TPE, Random, Anneal, Evolution, BatchTuner, MetisTuner, GPTuner
#SMAC (SMAC should be installed through nnictl)
builtinTunerName
:
TPE
classArgs
:
#choice: maximize, minimize
optimize_mode
:
maximize
trial
:
command
:
python3 mnist.py
codeDir
:
.
gpuNum
:
0
examples/trials/mnist-pytorch/config_assessor.yml
0 → 100644
View file @
4320da81
authorName
:
default
experimentName
:
example_mnist_pytorch
trialConcurrency
:
1
maxExecDuration
:
1h
maxTrialNum
:
50
#choice: local, remote
trainingServicePlatform
:
local
searchSpacePath
:
search_space.json
#choice: true, false
useAnnotation
:
false
tuner
:
#choice: TPE, Random, Anneal, Evolution, BatchTuner, MetisTuner, GPTuner
#SMAC (SMAC should be installed through nnictl)
builtinTunerName
:
TPE
classArgs
:
#choice: maximize, minimize
optimize_mode
:
maximize
assessor
:
#choice: Medianstop, Curvefitting
builtinAssessorName
:
Curvefitting
classArgs
:
#choice: maximize, minimize
optimize_mode
:
maximize
epoch_num
:
20
threshold
:
0.9
trial
:
command
:
python3 mnist.py
codeDir
:
.
gpuNum
:
0
examples/trials/mnist-pytorch/config_frameworkcontroller.yml
0 → 100644
View file @
4320da81
authorName
:
default
experimentName
:
example_mnist_pytorch
trialConcurrency
:
1
maxExecDuration
:
1h
maxTrialNum
:
10
#choice: local, remote, pai, kubeflow
trainingServicePlatform
:
frameworkcontroller
searchSpacePath
:
search_space.json
#choice: true, false
useAnnotation
:
false
tuner
:
#choice: TPE, Random, Anneal, Evolution, BatchTuner, MetisTuner, GPTuner
builtinTunerName
:
TPE
classArgs
:
#choice: maximize, minimize
optimize_mode
:
maximize
assessor
:
builtinAssessorName
:
Medianstop
classArgs
:
optimize_mode
:
maximize
gpuNum
:
0
trial
:
codeDir
:
.
taskRoles
:
-
name
:
worker
taskNum
:
1
command
:
python3 mnist.py
gpuNum
:
1
cpuNum
:
1
memoryMB
:
8192
image
:
msranni/nni:latest
frameworkAttemptCompletionPolicy
:
minFailedTaskCount
:
1
minSucceededTaskCount
:
1
frameworkcontrollerConfig
:
storage
:
nfs
nfs
:
# Your NFS server IP, like 10.10.10.10
server
:
{
your_nfs_server_ip
}
# Your NFS server export path, like /var/nfs/nni
path
:
{
your_nfs_server_export_path
}
\ No newline at end of file
examples/trials/mnist-pytorch/config_kubeflow.yml
0 → 100644
View file @
4320da81
authorName
:
default
experimentName
:
example_dist_pytorch
trialConcurrency
:
1
maxExecDuration
:
1h
maxTrialNum
:
1
#choice: local, remote, pai, kubeflow
trainingServicePlatform
:
kubeflow
searchSpacePath
:
search_space.json
#choice: true, false
useAnnotation
:
false
tuner
:
#choice: TPE, Random, Anneal, Evolution, BatchTuner, MetisTuner, GPTuner
builtinTunerName
:
TPE
classArgs
:
#choice: maximize, minimize
optimize_mode
:
maximize
trial
:
codeDir
:
.
worker
:
replicas
:
1
command
:
python3 mnist.py
gpuNum
:
0
cpuNum
:
1
memoryMB
:
8192
image
:
msranni/nni:latest
kubeflowConfig
:
operator
:
tf-operator
apiVersion
:
v1alpha2
storage
:
nfs
nfs
:
server
:
10.10.10.10
path
:
/var/nfs/general
\ No newline at end of file
examples/trials/mnist-pytorch/config_pai.yml
0 → 100644
View file @
4320da81
authorName
:
default
experimentName
:
example_mnist_pytorch
trialConcurrency
:
1
maxExecDuration
:
1h
maxTrialNum
:
10
#choice: local, remote, pai
trainingServicePlatform
:
pai
searchSpacePath
:
search_space.json
#choice: true, false
useAnnotation
:
false
tuner
:
#choice: TPE, Random, Anneal, Evolution, BatchTuner, MetisTuner, GPTuner
#SMAC (SMAC should be installed through nnictl)
builtinTunerName
:
TPE
classArgs
:
#choice: maximize, minimize
optimize_mode
:
maximize
trial
:
command
:
python3 mnist.py
codeDir
:
.
gpuNum
:
0
cpuNum
:
1
memoryMB
:
8196
#The docker image to run nni job on pai
image
:
msranni/nni:latest
paiConfig
:
#The username to login pai
userName
:
username
#The password to login pai
passWord
:
password
#The host of restful server of pai
host
:
10.10.10.10
\ No newline at end of file
examples/trials/mnist-pytorch/config_windows.yml
0 → 100644
View file @
4320da81
authorName
:
default
experimentName
:
example_mnist_pytorch
trialConcurrency
:
1
maxExecDuration
:
1h
maxTrialNum
:
10
#choice: local, remote, pai
trainingServicePlatform
:
local
searchSpacePath
:
search_space.json
#choice: true, false
useAnnotation
:
false
tuner
:
#choice: TPE, Random, Anneal, Evolution, BatchTuner, MetisTuner, GPTuner
#SMAC (SMAC should be installed through nnictl)
builtinTunerName
:
TPE
classArgs
:
#choice: maximize, minimize
optimize_mode
:
maximize
trial
:
command
:
python mnist.py
codeDir
:
.
gpuNum
:
0
examples/trials/mnist-pytorch/mnist.py
0 → 100644
View file @
4320da81
"""
A deep MNIST classifier using convolutional layers.
This file is a modification of the official pytorch mnist example:
https://github.com/pytorch/examples/blob/master/mnist/main.py
"""
import
argparse
import
logging
import
nni
import
torch
import
torch.nn
as
nn
import
torch.nn.functional
as
F
import
torch.optim
as
optim
from
torchvision
import
datasets
,
transforms
logger
=
logging
.
getLogger
(
'mnist_AutoML'
)
class
Net
(
nn
.
Module
):
def
__init__
(
self
,
hidden_size
):
super
(
Net
,
self
).
__init__
()
self
.
conv1
=
nn
.
Conv2d
(
1
,
20
,
5
,
1
)
self
.
conv2
=
nn
.
Conv2d
(
20
,
50
,
5
,
1
)
self
.
fc1
=
nn
.
Linear
(
4
*
4
*
50
,
hidden_size
)
self
.
fc2
=
nn
.
Linear
(
hidden_size
,
10
)
def
forward
(
self
,
x
):
x
=
F
.
relu
(
self
.
conv1
(
x
))
x
=
F
.
max_pool2d
(
x
,
2
,
2
)
x
=
F
.
relu
(
self
.
conv2
(
x
))
x
=
F
.
max_pool2d
(
x
,
2
,
2
)
x
=
x
.
view
(
-
1
,
4
*
4
*
50
)
x
=
F
.
relu
(
self
.
fc1
(
x
))
x
=
self
.
fc2
(
x
)
return
F
.
log_softmax
(
x
,
dim
=
1
)
def
train
(
args
,
model
,
device
,
train_loader
,
optimizer
,
epoch
):
model
.
train
()
for
batch_idx
,
(
data
,
target
)
in
enumerate
(
train_loader
):
data
,
target
=
data
.
to
(
device
),
target
.
to
(
device
)
optimizer
.
zero_grad
()
output
=
model
(
data
)
loss
=
F
.
nll_loss
(
output
,
target
)
loss
.
backward
()
optimizer
.
step
()
if
batch_idx
%
args
[
'log_interval'
]
==
0
:
logger
.
info
(
'Train Epoch: {} [{}/{} ({:.0f}%)]
\t
Loss: {:.6f}'
.
format
(
epoch
,
batch_idx
*
len
(
data
),
len
(
train_loader
.
dataset
),
100.
*
batch_idx
/
len
(
train_loader
),
loss
.
item
()))
def
test
(
args
,
model
,
device
,
test_loader
):
model
.
eval
()
test_loss
=
0
correct
=
0
with
torch
.
no_grad
():
for
data
,
target
in
test_loader
:
data
,
target
=
data
.
to
(
device
),
target
.
to
(
device
)
output
=
model
(
data
)
# sum up batch loss
test_loss
+=
F
.
nll_loss
(
output
,
target
,
reduction
=
'sum'
).
item
()
# get the index of the max log-probability
pred
=
output
.
argmax
(
dim
=
1
,
keepdim
=
True
)
correct
+=
pred
.
eq
(
target
.
view_as
(
pred
)).
sum
().
item
()
test_loss
/=
len
(
test_loader
.
dataset
)
accuracy
=
100.
*
correct
/
len
(
test_loader
.
dataset
)
logger
.
info
(
'
\n
Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)
\n
'
.
format
(
test_loss
,
correct
,
len
(
test_loader
.
dataset
),
accuracy
))
return
accuracy
def
main
(
args
):
use_cuda
=
not
args
[
'no_cuda'
]
and
torch
.
cuda
.
is_available
()
torch
.
manual_seed
(
args
[
'seed'
])
device
=
torch
.
device
(
"cuda"
if
use_cuda
else
"cpu"
)
kwargs
=
{
'num_workers'
:
1
,
'pin_memory'
:
True
}
if
use_cuda
else
{}
train_loader
=
torch
.
utils
.
data
.
DataLoader
(
datasets
.
MNIST
(
args
[
'data_dir'
],
train
=
True
,
download
=
True
,
transform
=
transforms
.
Compose
([
transforms
.
ToTensor
(),
transforms
.
Normalize
((
0.1307
,),
(
0.3081
,))
])),
batch_size
=
args
[
'batch_size'
],
shuffle
=
True
,
**
kwargs
)
test_loader
=
torch
.
utils
.
data
.
DataLoader
(
datasets
.
MNIST
(
args
[
'data_dir'
],
train
=
False
,
transform
=
transforms
.
Compose
([
transforms
.
ToTensor
(),
transforms
.
Normalize
((
0.1307
,),
(
0.3081
,))
])),
batch_size
=
1000
,
shuffle
=
True
,
**
kwargs
)
hidden_size
=
args
[
'hidden_size'
]
model
=
Net
(
hidden_size
=
hidden_size
).
to
(
device
)
optimizer
=
optim
.
SGD
(
model
.
parameters
(),
lr
=
args
[
'lr'
],
momentum
=
args
[
'momentum'
])
for
epoch
in
range
(
1
,
args
[
'epochs'
]
+
1
):
train
(
args
,
model
,
device
,
train_loader
,
optimizer
,
epoch
)
test_acc
=
test
(
args
,
model
,
device
,
test_loader
)
# report intermediate result
nni
.
report_intermediate_result
(
test_acc
)
logger
.
debug
(
'test accuracy %g'
,
test_acc
)
logger
.
debug
(
'Pipe send intermediate result done.'
)
test_acc
=
test
(
args
,
model
,
device
,
test_loader
)
# report final result
nni
.
report_final_result
(
test_acc
)
logger
.
debug
(
'Final result is %g'
,
test_acc
)
logger
.
debug
(
'Send final result done.'
)
def
get_params
():
# Training settings
parser
=
argparse
.
ArgumentParser
(
description
=
'PyTorch MNIST Example'
)
parser
.
add_argument
(
"--data_dir"
,
type
=
str
,
default
=
'/tmp/tensorflow/mnist/input_data'
,
help
=
"data directory"
)
parser
.
add_argument
(
'--batch_size'
,
type
=
int
,
default
=
64
,
metavar
=
'N'
,
help
=
'input batch size for training (default: 64)'
)
parser
.
add_argument
(
"--hidden_size"
,
type
=
int
,
default
=
512
,
metavar
=
'N'
,
help
=
'hidden layer size (default: 512)'
)
parser
.
add_argument
(
'--lr'
,
type
=
float
,
default
=
0.01
,
metavar
=
'LR'
,
help
=
'learning rate (default: 0.01)'
)
parser
.
add_argument
(
'--momentum'
,
type
=
float
,
default
=
0.5
,
metavar
=
'M'
,
help
=
'SGD momentum (default: 0.5)'
)
parser
.
add_argument
(
'--epochs'
,
type
=
int
,
default
=
10
,
metavar
=
'N'
,
help
=
'number of epochs to train (default: 10)'
)
parser
.
add_argument
(
'--seed'
,
type
=
int
,
default
=
1
,
metavar
=
'S'
,
help
=
'random seed (default: 1)'
)
parser
.
add_argument
(
'--no_cuda'
,
action
=
'store_true'
,
default
=
False
,
help
=
'disables CUDA training'
)
parser
.
add_argument
(
'--log_interval'
,
type
=
int
,
default
=
1000
,
metavar
=
'N'
,
help
=
'how many batches to wait before logging training status'
)
args
,
_
=
parser
.
parse_known_args
()
return
args
if
__name__
==
'__main__'
:
try
:
# get parameters form tuner
tuner_params
=
nni
.
get_next_parameter
()
logger
.
debug
(
tuner_params
)
params
=
vars
(
get_params
())
params
.
update
(
tuner_params
)
main
(
params
)
except
Exception
as
exception
:
logger
.
exception
(
exception
)
raise
examples/trials/mnist-pytorch/requirements.txt
0 → 100644
View file @
4320da81
torch
torchvision
examples/trials/mnist-pytorch/search_space.json
0 → 100644
View file @
4320da81
{
"batch_size"
:
{
"_type"
:
"choice"
,
"_value"
:
[
16
,
32
,
64
,
128
]},
"hidden_size"
:{
"_type"
:
"choice"
,
"_value"
:[
128
,
256
,
512
,
1024
]},
"lr"
:{
"_type"
:
"choice"
,
"_value"
:[
0.0001
,
0.001
,
0.01
,
0.1
]},
"momentum"
:{
"_type"
:
"uniform"
,
"_value"
:[
0
,
1
]}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment