Closed rzr002 closed 5 months ago
Perhaps you could try using the following code in pruning.sh instead of running with slurm.
# Run in bash, it will automatically use resources available in the current environment
composer $TRAIN_SCRIPT \
$config_file \
run_name=${run_name} \
data_local=${data_local} \
eval_loader.dataset.split=${eval_split_name} \
global_train_batch_size=${global_train_batch_size} \
device_train_microbatch_size=${device_train_microbatch_size} \
device_eval_batch_size=${device_eval_batch_size} \
max_seq_len=${max_seq_len} \
max_duration=${max_duration} \
eval_first=false \
scheduler.t_warmup=${t_warmup} \
save_folder=${save_dir} \
loggers.wandb.init_kwargs.dir=${wandb_dir} \
eval_interval=${eval_interval} \
save_interval=${save_interval} \
optimizer.lr=${lr} \
optimizer.lag_lr=${lag_lr} \
model.path=${path} \
model.l0_module.lagrangian_warmup_steps=${lagr_warmup} \
model.l0_module.pruning_modules='[head,intermediate,layer,hidden]' \
model.l0_module.eval_target_model=${eval_target_model} \
model.l0_module.target_model.d_model=${target_d_model} \
model.l0_module.target_model.n_heads=${target_n_heads} \
model.l0_module.target_model.n_layers=${target_n_layers} \
model.l0_module.target_model.intermediate_size=${target_intermediate_size} \
callbacks.data_loading.dynamic=${dynamic} \
callbacks.data_loading.set_names=${set_names} \
callbacks.data_loading.proportion=${proportion} \
callbacks.data_loading.update_type=${update_type} \
callbacks.data_loading.target_loss=${target_loss} \
train_loader.num_workers=0 \
train_loader.prefetch_factor=null \
train_loader.persistent_workers=false \
autoresume=false
Perhaps you could try using the following code in pruning.sh instead of running with slurm.
# Run in bash, it will automatically use resources available in the current environment composer $TRAIN_SCRIPT \ $config_file \ run_name=${run_name} \ data_local=${data_local} \ eval_loader.dataset.split=${eval_split_name} \ global_train_batch_size=${global_train_batch_size} \ device_train_microbatch_size=${device_train_microbatch_size} \ device_eval_batch_size=${device_eval_batch_size} \ max_seq_len=${max_seq_len} \ max_duration=${max_duration} \ eval_first=false \ scheduler.t_warmup=${t_warmup} \ save_folder=${save_dir} \ loggers.wandb.init_kwargs.dir=${wandb_dir} \ eval_interval=${eval_interval} \ save_interval=${save_interval} \ optimizer.lr=${lr} \ optimizer.lag_lr=${lag_lr} \ model.path=${path} \ model.l0_module.lagrangian_warmup_steps=${lagr_warmup} \ model.l0_module.pruning_modules='[head,intermediate,layer,hidden]' \ model.l0_module.eval_target_model=${eval_target_model} \ model.l0_module.target_model.d_model=${target_d_model} \ model.l0_module.target_model.n_heads=${target_n_heads} \ model.l0_module.target_model.n_layers=${target_n_layers} \ model.l0_module.target_model.intermediate_size=${target_intermediate_size} \ callbacks.data_loading.dynamic=${dynamic} \ callbacks.data_loading.set_names=${set_names} \ callbacks.data_loading.proportion=${proportion} \ callbacks.data_loading.update_type=${update_type} \ callbacks.data_loading.target_loss=${target_loss} \ train_loader.num_workers=0 \ train_loader.prefetch_factor=null \ train_loader.persistent_workers=false \ autoresume=false
Yes, thanks, you are right, but Composer still doesn't support multiple nodes, does it? I don't know how to start multiple nodes. Could you give me a specific script?
Perhaps you could try using the following code in pruning.sh instead of running with slurm.
# Run in bash, it will automatically use resources available in the current environment composer $TRAIN_SCRIPT \ $config_file \ run_name=${run_name} \ data_local=${data_local} \ eval_loader.dataset.split=${eval_split_name} \ global_train_batch_size=${global_train_batch_size} \ device_train_microbatch_size=${device_train_microbatch_size} \ device_eval_batch_size=${device_eval_batch_size} \ max_seq_len=${max_seq_len} \ max_duration=${max_duration} \ eval_first=false \ scheduler.t_warmup=${t_warmup} \ save_folder=${save_dir} \ loggers.wandb.init_kwargs.dir=${wandb_dir} \ eval_interval=${eval_interval} \ save_interval=${save_interval} \ optimizer.lr=${lr} \ optimizer.lag_lr=${lag_lr} \ model.path=${path} \ model.l0_module.lagrangian_warmup_steps=${lagr_warmup} \ model.l0_module.pruning_modules='[head,intermediate,layer,hidden]' \ model.l0_module.eval_target_model=${eval_target_model} \ model.l0_module.target_model.d_model=${target_d_model} \ model.l0_module.target_model.n_heads=${target_n_heads} \ model.l0_module.target_model.n_layers=${target_n_layers} \ model.l0_module.target_model.intermediate_size=${target_intermediate_size} \ callbacks.data_loading.dynamic=${dynamic} \ callbacks.data_loading.set_names=${set_names} \ callbacks.data_loading.proportion=${proportion} \ callbacks.data_loading.update_type=${update_type} \ callbacks.data_loading.target_loss=${target_loss} \ train_loader.num_workers=0 \ train_loader.prefetch_factor=null \ train_loader.persistent_workers=false \ autoresume=false
Yes, thanks, you are right, but Composer still doesn't support multiple nodes, does it? I don't know how to start multiple nodes. Could you give me a specific script?
Single-computer multi-GPU will be used automatically, but multi-computer multi-GPU I haven't tried that either. It involves FSDP configuration, you can try it.
Composer supports multi-node training, you simply need to configure the MASTER_ADDR
, MASTER_PORT
and WORLD_SIZE
properly in the script, and run composer
command on each of the node. Similar to other multi-node training framworks, all the nodes will communicate with the head node (MASTER_ADDR).
Composer supports multi-node training, you simply need to configure the
MASTER_ADDR
,MASTER_PORT
andWORLD_SIZE
properly in the script, and runcomposer
command on each of the node. Similar to other multi-node training framworks, all the nodes will communicate with the head node (MASTER_ADDR).
thanks
test_cpt_rzr_gpu16.sh: line 113: sbatch: command not found
Since I have to launch a new container environment for each experiment and I have never worked with Slurm before, and this GPU cluster doesn't come with Slurm installed, I found that installing and configuring Slurm seems quite troublesome. Is there any other way to implement multi-node, multi-GPU setups?thanks