-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Save input cfg file #14
Conversation
The file was being opened in write-bytes mode and that caused the issue while dumping YAML.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks really good @akainth015 ! one small inline comment.
After the comment is addressed, can you run one test and share what the train_config.yaml looks like?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks good ! @grace-omotoso , @akainth015 , can you share an output of what train_config.yaml looks like? once we can confirm that, we are good to go and can merge this PR
@prigoyal Find below the content of train_config.yaml. I cannot attach the file because it is unsupported.
!!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
VERSION: 1
config: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
CHECKPOINT: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
APPEND_DISTR_RUN_ID: false
AUTO_RESUME: false
BACKEND: disk
CHECKPOINT_FREQUENCY: 5
CHECKPOINT_ITER_FREQUENCY: -1
DIR: .
LATEST_CHECKPOINT_RESUME_FILE_NUM: 1
OVERWRITE_EXISTING: true
USE_SYMLINK_CHECKPOINT_FOR_RESUME: false
CLUSTERFIT: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
CLUSTER_BACKEND: faiss
FEATURES: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
DATASET_NAME: ''
DATA_PARTITION: TRAIN
LAYER_NAME: ''
NUM_CLUSTERS: 16000
N_ITER: 50
DATA: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
DDP_BUCKET_CAP_MB: 25
ENABLE_ASYNC_GPU_COPY: true
NUM_DATALOADER_WORKERS: 0
PIN_MEMORY: true
TEST: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
BATCHSIZE_PER_REPLICA: 256
COLLATE_FUNCTION: default_collate
COLLATE_FUNCTION_PARAMS: !!python/object:vissl.utils.hydra_config.AttrDict {}
COPY_DESTINATION_DIR: ''
COPY_TO_LOCAL_DISK: false
DATASET_NAMES:
- imagenet1k_folder
DATA_LIMIT: -1
DATA_PATHS: []
DATA_SOURCES: []
DEFAULT_GRAY_IMG_SIZE: 224
DROP_LAST: false
ENABLE_QUEUE_DATASET: false
INPUT_KEY_NAMES:
- data
LABEL_PATHS: []
LABEL_SOURCES: []
LABEL_TYPE: sample_index
MMAP_MODE: true
NEW_IMG_PATH_PREFIX: ''
REMOVE_IMG_PATH_PREFIX: ''
TARGET_KEY_NAMES:
- label
TRANSFORMS: []
USE_STATEFUL_DISTRIBUTED_SAMPLER: false
TRAIN: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
BATCHSIZE_PER_REPLICA: 2
COLLATE_FUNCTION: simclr_collator
COLLATE_FUNCTION_PARAMS: !!python/object:vissl.utils.hydra_config.AttrDict {}
COPY_DESTINATION_DIR: ''
COPY_TO_LOCAL_DISK: false
DATASET_NAMES:
- imagenet1k_folder
DATA_LIMIT: 4
DATA_PATHS: []
DATA_SOURCES:
- synthetic
DEFAULT_GRAY_IMG_SIZE: 224
DROP_LAST: true
ENABLE_QUEUE_DATASET: false
INPUT_KEY_NAMES:
- data
LABEL_PATHS: []
LABEL_SOURCES: []
LABEL_TYPE: sample_index
MMAP_MODE: true
NEW_IMG_PATH_PREFIX: ''
REMOVE_IMG_PATH_PREFIX: ''
TARGET_KEY_NAMES:
- label
TRANSFORMS:
- name: ImgReplicatePil
num_times: 2
- name: RandomResizedCrop
size: 224
- name: RandomHorizontalFlip
p: 0.5
- name: ImgPilColorDistortion
strength: 1.0
- name: ImgPilGaussianBlur
p: 0.5
radius_max: 2.0
radius_min: 0.1
- name: ToTensor
- mean:
- 0.485
- 0.456
- 0.406
name: Normalize
std:
- 0.229
- 0.224
- 0.225
USE_STATEFUL_DISTRIBUTED_SAMPLER: false
DISTRIBUTED: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
BACKEND: gloo
BROADCAST_BUFFERS: true
INIT_METHOD: tcp
MANUAL_GRADIENT_REDUCTION: false
NCCL_DEBUG: false
NCCL_SOCKET_NTHREADS: ''
NUM_NODES: 1
NUM_PROC_PER_NODE: 1
RUN_ID: auto
HOOKS: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
LOG_GPU_STATS: true
MEMORY_SUMMARY: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
LOG_ITERATION_NUM: 0
PRINT_MEMORY_SUMMARY: true
MODEL_COMPLEXITY: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
COMPUTE_COMPLEXITY: false
INPUT_SHAPE:
- 3
- 224
- 224
PERF_STATS: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
MONITOR_PERF_STATS: true
PERF_STAT_FREQUENCY: -1
ROLLING_BTIME_FREQ: -1
TENSORBOARD_SETUP: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
EXPERIMENT_LOG_DIR: tensorboard
FLUSH_EVERY_N_MIN: 5
LOG_DIR: .
LOG_PARAMS: true
LOG_PARAMS_EVERY_N_ITERS: 310
LOG_PARAMS_GRADIENTS: true
USE_TENSORBOARD: false
IMG_RETRIEVAL: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
DATASET_PATH: ''
EVAL_BINARY_PATH: ''
EVAL_DATASET_NAME: Paris
FEATS_PROCESSING_TYPE: ''
GEM_POOL_POWER: 4.0
N_PCA: 512
RESIZE_IMG: 1024
SHOULD_TRAIN_PCA_OR_WHITENING: true
SPATIAL_LEVELS: 3
TEMP_DIR: /tmp/instance_retrieval/
TRAIN_DATASET_NAME: Oxford
WHITEN_IMG_LIST: ''
LOG_FREQUENCY: 10
LOSS: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
CrossEntropyLoss: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
ignore_index: -1
bce_logits_multiple_output_single_target: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
normalize_output: false
reduction: none
world_size: 1
cross_entropy_multiple_output_single_target: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
ignore_index: -1
normalize_output: false
reduction: mean
temperature: 1.0
weight: null
deepclusterv2_loss: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
BATCHSIZE_PER_REPLICA: 256
DROP_LAST: true
kmeans_iters: 10
memory_params: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
crops_for_mb:
- 0
embedding_dim: 128
num_clusters:
- 3000
- 3000
- 3000
num_crops: 2
num_train_samples: -1
temperature: 0.1
moco_loss: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
embedding_dim: 128
momentum: 0.999
queue_size: 65536
temperature: 0.2
multicrop_simclr_info_nce_loss: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
buffer_params: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
effective_batch_size: 4096
embedding_dim: 128
world_size: 64
num_crops: 2
temperature: 0.1
name: simclr_info_nce_loss
nce_loss_with_memory: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
loss_type: nce
loss_weights:
- 1.0
memory_params: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
embedding_dim: 128
memory_size: -1
momentum: 0.5
norm_init: true
update_mem_on_forward: true
negative_sampling_params: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
num_negatives: 16000
type: random
norm_constant: -1
norm_embedding: true
num_train_samples: -1
temperature: 0.07
update_mem_with_emb_index: -100
simclr_info_nce_loss: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
buffer_params: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
effective_batch_size: 4
embedding_dim: 128
world_size: 1
temperature: 0.1
swav_loss: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
crops_for_assign:
- 0
- 1
embedding_dim: 128
epsilon: 0.05
normalize_last_layer: true
num_crops: 2
num_iters: 3
num_prototypes:
- 3000
output_dir: .
queue: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
local_queue_length: 0
queue_length: 0
start_iter: 0
temp_hard_assignment_iters: 0
temperature: 0.1
use_double_precision: false
swav_momentum_loss: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
crops_for_assign:
- 0
- 1
embedding_dim: 128
epsilon: 0.05
momentum: 0.99
momentum_eval_mode_iter_start: 0
normalize_last_layer: true
num_crops: 2
num_iters: 3
num_prototypes:
- 3000
queue: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
local_queue_length: 0
queue_length: 0
start_iter: 0
temperature: 0.1
use_double_precision: false
MACHINE: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
DEVICE: cpu
METERS: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
accuracy_list_meter: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
meter_names: []
num_meters: 1
topk_values:
- 1
enable_training_meter: true
mean_ap_list_meter: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
max_cpu_capacity: -1
meter_names: []
num_classes: 9605
num_meters: 1
name: ''
MODEL: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
ACTIVATION_CHECKPOINTING: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
NUM_ACTIVATION_CHECKPOINTING_SPLITS: 2
USE_ACTIVATION_CHECKPOINTING: false
AMP_PARAMS: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
AMP_ARGS: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
opt_level: O1
AMP_TYPE: apex
USE_AMP: false
CUDA_CACHE: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
CLEAR_CUDA_CACHE: false
CLEAR_FREQ: 100
FEATURE_EVAL_SETTINGS: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
EVAL_MODE_ON: false
EVAL_TRUNK_AND_HEAD: false
EXTRACT_TRUNK_FEATURES_ONLY: false
FREEZE_TRUNK_AND_HEAD: false
FREEZE_TRUNK_ONLY: false
LINEAR_EVAL_FEAT_POOL_OPS_MAP: []
SHOULD_FLATTEN_FEATS: true
GRAD_CLIP: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
MAX_NORM: 1
NORM_TYPE: 2
USE_GRAD_CLIP: false
HEAD: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
BATCHNORM_EPS: 1.0e-05
BATCHNORM_MOMENTUM: 0.1
PARAMS:
- - mlp
- dims:
- 2048
- 128
PARAMS_MULTIPLIER: 1.0
INPUT_TYPE: rgb
MULTI_INPUT_HEAD_MAPPING: []
NON_TRAINABLE_PARAMS: []
SHARDED_DDP_SETUP: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
reduce_buffer_size: -1
SINGLE_PASS_EVERY_CROP: false
SYNC_BN_CONFIG: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
CONVERT_BN_TO_SYNC_BN: false
GROUP_SIZE: 1
SYNC_BN_TYPE: pytorch
TEMP_FROZEN_PARAMS_ITER_MAP: []
TRUNK: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
NAME: resnet
TRUNK_PARAMS: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
EFFICIENT_NETS: !!python/object:vissl.utils.hydra_config.AttrDict {}
REGNET: !!python/object:vissl.utils.hydra_config.AttrDict {}
RESNETS: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
DEPTH: 50
GROUPNORM_GROUPS: 32
GROUPS: 1
LAYER4_STRIDE: 2
NORM: BatchNorm
STANDARDIZE_CONVOLUTIONS: false
WIDTH_MULTIPLIER: 1
WIDTH_PER_GROUP: 64
ZERO_INIT_RESIDUAL: false
VISION_TRANSFORMERS: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
ATTENTION_DROPOUT_RATE: 0
CLASSIFIER: token
DROPOUT_RATE: 0
DROP_PATH_RATE: 0
HIDDEN_DIM: 768
IMAGE_SIZE: 224
MLP_DIM: 3072
NUM_HEADS: 12
NUM_LAYERS: 12
PATCH_SIZE: 16
QKV_BIAS: false
QK_SCALE: false
name: null
WEIGHTS_INIT: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
APPEND_PREFIX: ''
PARAMS_FILE: ''
REMOVE_PREFIX: ''
SKIP_LAYERS:
- num_batches_tracked
STATE_DICT_KEY_NAME: classy_state_dict
MULTI_PROCESSING_METHOD: forkserver
NEAREST_NEIGHBOR: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
L2_NORM_FEATS: false
SIGMA: 0.1
TOPK: 200
OPTIMIZER: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
betas:
- 0.9
- 0.999
construct_single_param_group_only: false
head_optimizer_params: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
use_different_lr: false
use_different_wd: false
weight_decay: 1.0e-06
larc_config: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
clip: false
eps: 1.0e-08
trust_coefficient: 0.001
momentum: 0.9
name: sgd
nesterov: false
non_regularized_parameters: []
num_epochs: 1
param_schedulers: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
lr: &id001 !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
auto_lr_scaling: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
auto_scale: true
base_lr_batch_size: 256
base_value: 0.3
end_value: 0.0
interval_scaling:
- rescaled
- fixed
lengths:
- 0.1
- 0.9
milestones:
- 30
- 60
name: cosine
schedulers:
- end_value: 0.0
name: cosine
start_value: 0.00234375
start_value: 0.00234375
update_interval: step
value: 0.1
values:
- 0.1
- 0.01
- 0.001
lr_head: *id001
regularize_bias: true
regularize_bn: false
use_larc: true
use_zero: false
weight_decay: 1.0e-06
SEED_VALUE: 0
SLURM: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
COMMENT: vissl job
CONSTRAINT: ''
LOG_FOLDER: .
MEM_GB: 250
NAME: vissl
PARTITION: learnfair
PORT_ID: 40050
TIME_HOURS: 72
USE_SLURM: false
SVM: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
cls_list: []
costs: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
base: -1.0
costs_list:
- 0.1
- 0.01
power_range:
- 4
- 20
cross_val_folds: 3
dual: true
force_retrain: false
loss: squared_hinge
low_shot: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
dataset_name: voc
k_values:
- 1
- 2
- 4
- 8
- 16
- 32
- 64
- 96
sample_inds:
- 1
- 2
- 3
- 4
- 5
max_iter: 2000
normalize: true
penalty: l2
TEST_EVERY_NUM_EPOCH: 1
TEST_MODEL: false
TEST_ONLY: false
TRAINER: !!python/object/new:vissl.utils.hydra_config.AttrDict
dictitems:
TASK_NAME: self_supervision_task
TRAIN_STEP_NAME: standard_train_step
VERBOSE: false
engine_name: train
node_id: 0
Summary: Pull Request resolved: fairinternal/ssl_scaling#79 This is a coagulate merge, coordinated by prigoyal and uhbuhb. It addresses the following issues/pull requests: 1. MLH-Fellowship#7 2. MLH-Fellowship#8 3. MLH-Fellowship#9 4. MLH-Fellowship#10 5. MLH-Fellowship#13 6. MLH-Fellowship#14 Pull Request resolved: facebookresearch#221 Differential Revision: D27608671 Pulled By: prigoyal fbshipit-source-id: d15232bb00d11db7b2c245a9312d3d5be165ada3 Co-authored-by: grace-omotoso
Summary: Pull Request resolved: fairinternal/ssl_scaling#79 This is a coagulate merge, coordinated by prigoyal and uhbuhb. It addresses the following issues/pull requests: 1. MLH-Fellowship#7 2. MLH-Fellowship#8 3. MLH-Fellowship#9 4. MLH-Fellowship#10 5. MLH-Fellowship#13 6. MLH-Fellowship#14 Pull Request resolved: facebookresearch#221 Differential Revision: D27608671 Pulled By: prigoyal fbshipit-source-id: ebe71ff5b25fa77394661d442062fdb127cc9a48 Co-authored-by: grace-omotoso
Summary: Pull Request resolved: facebookresearch#294 Pull Request resolved: fairinternal/ssl_scaling#79 This is a coagulate merge, coordinated by prigoyal and uhbuhb. It addresses the following issues/pull requests: 1. MLH-Fellowship#7 2. MLH-Fellowship#8 3. MLH-Fellowship#9 4. MLH-Fellowship#10 5. MLH-Fellowship#13 6. MLH-Fellowship#14 Pull Request resolved: facebookresearch#221 Differential Revision: D27608671 Pulled By: prigoyal fbshipit-source-id: 64920e6d09e95a783673641024b80f2acb7b3966 Co-authored-by: grace-omotoso
Summary: This is a coagulate merge, coordinated by prigoyal and uhbuhb. It addresses the following issues/pull requests: 1. MLH-Fellowship#7 2. MLH-Fellowship#8 3. MLH-Fellowship#9 4. MLH-Fellowship#10 5. MLH-Fellowship#13 6. MLH-Fellowship#14 Pull Request resolved: facebookresearch#221 Differential Revision: D27794128 Pulled By: prigoyal fbshipit-source-id: 5c44a91c2e8be72fa35f787084be6048ed4aa349 Co-authored-by: grace-omotoso
Summary: Pull Request resolved: facebookresearch#295 This is a coagulate merge, coordinated by prigoyal and uhbuhb. It addresses the following issues/pull requests: 1. MLH-Fellowship#7 2. MLH-Fellowship#8 3. MLH-Fellowship#9 4. MLH-Fellowship#10 5. MLH-Fellowship#13 6. MLH-Fellowship#14 Pull Request resolved: facebookresearch#221 Differential Revision: D27794128 Pulled By: prigoyal fbshipit-source-id: 4fa0322a902e446a02b46a2233eb54c6fac92f8f Co-authored-by: grace-omotoso
Summary: Pull Request resolved: facebookresearch#295 This is a coagulate merge, coordinated by prigoyal and uhbuhb. It addresses the following issues/pull requests: 1. MLH-Fellowship#7 2. MLH-Fellowship#8 3. MLH-Fellowship#9 4. MLH-Fellowship#10 5. MLH-Fellowship#13 6. MLH-Fellowship#14 Pull Request resolved: facebookresearch#221 Differential Revision: D27794128 Pulled By: prigoyal fbshipit-source-id: 00300039ef55ddcd59672d56e068269d5db010a4 Co-authored-by: grace-omotoso
Summary: Pull Request resolved: facebookresearch#295 This is a coagulate merge, coordinated by prigoyal and uhbuhb. It addresses the following issues/pull requests: 1. MLH-Fellowship#7 2. MLH-Fellowship#8 3. MLH-Fellowship#9 4. MLH-Fellowship#10 5. MLH-Fellowship#13 6. MLH-Fellowship#14 Pull Request resolved: facebookresearch#221 Differential Revision: D27794128 Pulled By: prigoyal fbshipit-source-id: 6e772f0dfcf8d39f613404be91b98f445f404ec1 Co-authored-by: grace-omotoso
Summary: Pull Request resolved: facebookresearch#295 This is a coagulate merge, coordinated by prigoyal and uhbuhb. It addresses the following issues/pull requests: 1. MLH-Fellowship#7 2. MLH-Fellowship#8 3. MLH-Fellowship#9 4. MLH-Fellowship#10 5. MLH-Fellowship#13 6. MLH-Fellowship#14 Pull Request resolved: facebookresearch#221 Differential Revision: D27794128 Pulled By: prigoyal fbshipit-source-id: 92903d11a64e7540ede12d027cbbc23cb201adef Co-authored-by: grace-omotoso
Summary: Pull Request resolved: facebookresearch#295 This is a coagulate merge, coordinated by prigoyal and uhbuhb. It addresses the following issues/pull requests: 1. MLH-Fellowship#7 2. MLH-Fellowship#8 3. MLH-Fellowship#9 4. MLH-Fellowship#10 5. MLH-Fellowship#13 6. MLH-Fellowship#14 Pull Request resolved: facebookresearch#221 Reviewed By: iseessel Differential Revision: D27794128 Pulled By: prigoyal fbshipit-source-id: ef1e0e3403b5a89e4aace01bdb0ba1bf04d7cc96 Co-authored-by: grace-omotoso
Summary: Pull Request resolved: facebookresearch#295 This is a coagulate merge, coordinated by prigoyal and uhbuhb. It addresses the following issues/pull requests: 1. MLH-Fellowship#7 2. MLH-Fellowship#8 3. MLH-Fellowship#9 4. MLH-Fellowship#10 5. MLH-Fellowship#13 6. MLH-Fellowship#14 Pull Request resolved: facebookresearch#221 Reviewed By: iseessel Differential Revision: D27794128 Pulled By: prigoyal fbshipit-source-id: 3320c1e37f762770faba9afc0749a18013074401 Co-authored-by: grace-omotoso
Summary: Pull Request resolved: #295 This is a coagulate merge, coordinated by prigoyal and uhbuhb. It addresses the following issues/pull requests: 1. MLH-Fellowship#7 2. MLH-Fellowship#8 3. MLH-Fellowship#9 4. MLH-Fellowship#10 5. MLH-Fellowship#13 6. MLH-Fellowship#14 Pull Request resolved: #221 Reviewed By: iseessel Differential Revision: D27794128 Pulled By: prigoyal fbshipit-source-id: 3f78b54ccc9fe529aab3899423b73cd1547bf029 Co-authored-by: grace-omotoso
Resolves #4