修改docker权限
通过将用户添加到docker用户组可以将sudo去掉,命令如下
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
wandb 配置
在云服务器上开启wandb 镜像
wandb local -e HOST=http://云服务器公网ip:8080
进入镜像 修改登录账号和密码
docker exec -it wandb-local bash
vi /vol/env/users.htpasswd # Remove the line with local@wandb.com in it #删除这个文件的里面的东西
/usr/local/bin/local password YOUR@EMAIL.COM #这一步会让你设置登录的密码,后面登录的账号就是这个邮箱,登陆密码就是这里设置的密码
exit #退出镜像文件
在自己电脑上进入http://云服务器公网ip:8080
用刚才修改的账号和密码 登录
在wandb.ai的官网获取license
配置license
wandb 使用
在自己电脑上登录
wandb login --host=http://云服务器IP:8080
测试
>>> import wandb
>>> wandb.init(project='test_local',entity='xxxx')
超参搜索
第一步,向wandb注册config,然后用wandb包装后的config代替原来的config。
import wandb
# Set up your default hyperparameters
hyperparameter_defaults = dict(
channels=[16, 32],
batch_size=100,
learning_rate=0.001,
optimizer="adam",
epochs=2,
)
# Pass your defaults to wandb.init
wandb.init(config=hyperparameter_defaults)
# Access all hyperparameter values through wandb.config
config = wandb.config
# Set up your model
model = make_model(config)
# Log metrics inside your training loop
for epoch in range(config["epochs"]):
val_acc, val_loss = model.fit()
metrics = {"validation_accuracy": val_acc,
"validation_loss": val_loss}
wandb.log(metrics)
第二步,完成sweep.yaml文件
它的作用是指定训练的脚本,搜索的方法,参数的取值范围,优化的目标,注意这里优化的目标必须在第一步用log进行注册。
program: train.py
method: bayes
metric:
name: validation_loss
goal: minimize
parameters:
learning_rate:
min: 0.0001
max: 0.1
optimizer:
values: ["adam", "sgd"]
第三步
在多个进程或者多台机器上运行
wandb sweep sweep.yaml
并且每个进程或机器要提前登录wandb
wandb agent <USERNAME/PROJECTNAME/SWEEPID>
early_terminate
wandb中使用的是hyperband算法,其中R是每个参数组上的最多分配的资源,η是下面的算法中, 内循环每一次迭代保留的参数组的比例,默认为3,也就是每轮保留效果最好的1/3. s用来控制内层循环的迭代次数。
假设总共的资源是81,那么根据s的不同,内循环中最开始采样的参数组数量,及其分配的资源数也不同:
wandb中的eta相当于η, 并且可以指定最高的迭代次数max_iter和s, 假设为max_iter=27,s=2,那么每个内循环中参数组的迭代次数,依次为[27/eta, 27/eta/eta],即[9,3]. 这里的迭代次数指的是调用wandb.log记录优化目标的次数。