{"id":15425914,"url":"https://github.com/ultmaster/acenas","last_synced_at":"2025-04-19T16:19:55.551Z","repository":{"id":83764564,"uuid":"393306181","full_name":"ultmaster/AceNAS","owner":"ultmaster","description":"Open source implementation of AceNAS: https://arxiv.org/abs/2108.03001","archived":false,"fork":false,"pushed_at":"2021-08-06T08:12:48.000Z","size":93,"stargazers_count":9,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-24T00:41:15.930Z","etag":null,"topics":["automl","nas"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ultmaster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-06T08:12:43.000Z","updated_at":"2025-01-26T03:01:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"c9e6b54e-38ba-4c1a-ba53-dc319553596b","html_url":"https://github.com/ultmaster/AceNAS","commit_stats":{"total_commits":1,"total_committers":1,"mean_commits":1.0,"dds":0.0,"last_synced_commit":"46c8895fd8a05ffbc61a6b44f1e813f64b4f66b7"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultmaster%2FAceNAS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultmaster%2FAceNAS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultmaster%2FAceNAS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultmaster%2FAceNAS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ultmaster","download_url":"https://codeload.github.com/ultmaster/AceNAS/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241481977,"owners_count":19969833,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automl","nas"],"created_at":"2024-10-01T17:54:20.311Z","updated_at":"2025-03-02T08:34:22.152Z","avatar_url":"https://github.com/ultmaster.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AceNAS\n\nThis repo is the experiment code of AceNAS, and is not considered as an official release. We are working on integrating AceNAS as a built-in strategy provided in [NNI](https://github.com/microsoft/nni).\n\n## Data Preparation\n\n1. Download our prepared data from [Google Drive](https://drive.google.com/file/d/1Ch_Zwv8NFfY9E12AKcp3X1KRR0yFSExP/view?usp=sharing). The directory should look like this:\n\n```\ndata\n├── checkpoints\n│   ├── acenas-m1.pth.tar\n│   ├── acenas-m2.pth.tar\n│   └── acenas-m3.pth.tar\n├── gcn\n│   ├── nasbench101_gt_all.pkl\n│   ├── nasbench201cifar10_gt_all.pkl\n│   ├── nasbench201_gt_all.pkl\n│   ├── nasbench201imagenet_gt_all.pkl\n│   ├── nds_amoeba_gt_all.pkl\n│   ├── nds_amoebaim_gt_all.pkl\n│   ├── nds_dartsfixwd_gt_all.pkl\n│   ├── nds_darts_gt_all.pkl\n│   ├── nds_dartsim_gt_all.pkl\n│   ├── nds_enasfixwd_gt_all.pkl\n│   ├── nds_enas_gt_all.pkl\n│   ├── nds_enasim_gt_all.pkl\n│   ├── nds_nasnet_gt_all.pkl\n│   ├── nds_nasnetim_gt_all.pkl\n│   ├── nds_pnasfixwd_gt_all.pkl\n│   ├── nds_pnas_gt_all.pkl\n│   ├── nds_pnasim_gt_all.pkl\n│   ├── nds_supernet_evaluate_all_test1_amoeba.json\n│   ├── nds_supernet_evaluate_all_test1_dartsfixwd.json\n│   ├── nds_supernet_evaluate_all_test1_darts.json\n│   ├── nds_supernet_evaluate_all_test1_enasfixwd.json\n│   ├── nds_supernet_evaluate_all_test1_enas.json\n│   ├── nds_supernet_evaluate_all_test1_nasnet.json\n│   ├── nds_supernet_evaluate_all_test1_pnasfixwd.json\n│   ├── nds_supernet_evaluate_all_test1_pnas.json\n│   ├── supernet_evaluate_all_test1_nasbench101.json\n│   ├── supernet_evaluate_all_test1_nasbench201cifar10.json\n│   ├── supernet_evaluate_all_test1_nasbench201imagenet.json\n│   └── supernet_evaluate_all_test1_nasbench201.json\n├── nb201\n│   ├── split-cifar100.txt\n│   ├── split-cifar10-valid.txt\n│   └── split-imagenet-16-120.txt\n├── proxyless\n│   ├── imagenet\n│   │   ├── augment_files.txt\n│   │   ├── test_files.txt\n│   │   ├── train_files.txt\n│   │   └── val_files.txt\n│   ├── proxyless-84ms-train.csv\n│   ├── proxyless-ws-results.csv\n│   └── tunas-proxylessnas-search.csv\n└── tunas\n    ├── imagenet_valid_split_filenames.txt\n    ├── random_architectures.csv\n    └── searched_architectures.csv\n```\n\n2. (Required for benchmark experiments) Download CIFAR-10, CIFAR-100, ImageNet-16-120 dataset and also put them under `data`.\n\n```\ndata\n├── cifar10\n│   └── cifar-10-batches-py\n│       ├── batches.meta\n│       ├── data_batch_1\n│       ├── data_batch_2\n│       ├── data_batch_3\n│       ├── data_batch_4\n│       ├── data_batch_5\n│       ├── readme.html\n│       └── test_batch\n├── cifar100\n│   └── cifar-100-python\n│       ├── meta\n│       ├── test\n│       └── train\n└── imagenet16\n    ├── train_data_batch_1\n    ├── train_data_batch_10\n    ├── train_data_batch_2\n    ├── train_data_batch_3\n    ├── train_data_batch_4\n    ├── train_data_batch_5\n    ├── train_data_batch_6\n    ├── train_data_batch_7\n    ├── train_data_batch_8\n    ├── train_data_batch_9\n    └── val_data\n```\n\n3. (Required for ImageNet experiments) Prepare ImageNet. You can put it anywhere.\n\n4. (Optional) Copy `tunas` (https://github.com/google-research/google-research/tree/master/tunas) to a folder named `tunas`.\n\n## Evaluate pre-trained models.\n\nWe provide 3 checkpoints obtained from 3 different runs in `data/checkpoints`. Please evaluate them via the following command.\n\n```bash\npython -m tools.standalone.imagenet_eval acenas-m1 /path/to/your/imagenet\npython -m tools.standalone.imagenet_eval acenas-m2 /path/to/your/imagenet\npython -m tools.standalone.imagenet_eval acenas-m3 /path/to/your/imagenet\n```\n\n## Train supernet\n\n```bash\npython -m tools.supernet.nasbench101 experiments/supernet/nasbench101.yml\npython -m tools.supernet.nasbench201 experiments/supernet/nasbench201.yml\npython -m tools.supernet.nds experiments/supernet/darts.yml\npython -m tools.supernet.proxylessnas experiments/supernet/proxylessnas.yml\n```\n\nPlease refer to `experiments/supernet` folder for more configurations.\n\n## Benchmark experiments\n\nWe've already provided weight-sharing results from supernet so that you do not have to train you own. The provided files can be found in `json` files located under `data/gcn`.\n\n```bash\n# pretrain\npython -m gcn.benchmarks.pretrain data/gcn/supernet_evaluate_all_test1_${SEARCHSPACE}.json data/gcn/${SEARCHSPACE}_gt_all.pkl --metric_keys top1 flops params\n# finetune\npython -m gcn.benchmarks.train --use_train_samples --budget {budget} --test_dataset data/gcn/${SEARCHSPACE}_gt_all.pkl --iteration 5 \\\n    --loss lambdarank --gnn_type gcn --early_stop_patience 50 --learning_rate 0.005 --opt_type adam --wd 5e-4 --epochs 300 --bs 20 \\\n    --resume /path/to/previous/output.pt\n```\n\n### Running baselines\n\nBRP-NAS:\n\n```bash\n# pretrain\npython -m gcn.benchmarks.pretrain data/gcn/supernet_evaluate_all_test1_${SEARCHSPACE}.json data/gcn/${SEARCHSPACE}_gt_all.pkl --metric_keys flops\n# finetune\npython -m gcn.benchmarks.train --use_train_samples --budget ${BUDGET} --test_dataset data/gcn/${SEARCHSPACE}_gt_all.pkl --iteration 5 \\\n    --loss brp --gnn_type brp --early_stop_patience 35 --learning_rate 0.00035 \\\n    --opt_type adamw --wd 5e-4 --epochs 250 --bs 64 --resume /path/to/previous/output.pt\n```\n\nVanilla:\n\n```bash\npython -m gcn.benchmarks.train --use_train_samples --budget ${BUDGET} --test_dataset data/gcn/${SEARCHSPACE}_gt_all.pkl --iteration 1 \\\n    --loss mse --gnn_type vanilla --n_hidden 144 --learning_rate 2e-4 --opt_type adam --wd 1e-3 --epochs 300 --bs 10\n```\n\n## ProxylessNAS search space\n\n### Train GCN\n\n```bash\npython -m gcn.proxyless.pretrain --metric_keys ws_accuracy simulated_pixel1_time_ms flops params\npython -m gcn.proxyless.train --loss lambdarank --early_stop_patience 50 --learning_rate 0.002 --opt_type adam --wd 5e-4 --epochs 300 --bs 20 \\\n    --resume /path/to/previous/output.pth\n```\n\n### Train final model\n\nValidation set:\n\n```bash\npython -m torch.distributed.launch --nproc_per_node=16 \\\n    --use_env --module \\\n    tools.standalone.imagenet_train \\\n    --output \"$OUTPUT_DIR\" \"$ARCH\" \"$IMAGENET_DIR\" \\\n    -b 256 --lr 2.64 --warmup-lr 0.1 \\\n    --warmup-epochs 5 --epochs 90 --sched cosine --num-classes 1000 \\\n    --opt rmsproptf --opt-eps 1. --weight-decay 4e-5 -j 8 --dist-bn reduce \\\n    --bn-momentum 0.01 --bn-eps 0.001 --drop 0. --no-held-out-val\n```\n\nTest set:\n\n```bash\npython -m torch.distributed.launch --nproc_per_node=16 \\\n    --use_env --module \\\n    tools.standalone.imagenet_train \\\n    --output \"$OUTPUT_DIR\" \"$ARCH\" \"$IMAGENET_DIR\" \\\n    -b 256 --lr 2.64 --warmup-lr 0.1 \\\n    --warmup-epochs 9 --epochs 360 --sched cosine --num-classes 1000 \\\n    --opt rmsproptf --opt-eps 1. --weight-decay 4e-5 -j 8 --dist-bn reduce \\\n    --bn-momentum 0.01 --bn-eps 0.001 --drop 0.15\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fultmaster%2Facenas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fultmaster%2Facenas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fultmaster%2Facenas/lists"}