diff --git a/docs/source/package_reference/cli.mdx b/docs/source/package_reference/cli.mdx
index 562e1f4a4..eafec816e 100644
--- a/docs/source/package_reference/cli.mdx
+++ b/docs/source/package_reference/cli.mdx
@@ -35,11 +35,11 @@ accelerate config [arguments]
                         (`~/.cache` or the content of `XDG_CACHE_HOME`) suffixed with `huggingface`.
 * `-h`, `--help` (`bool`) -- Show a help message and exit
 
-## accelerate default-config 
+## accelerate config default
 
 **Command**:
 
-`accelerate default-config` or `accelerate-default-config`
+`accelerate config default` or `accelerate-config default`
 
 Create a default config file for Accelerate with only a few flags set.
 
diff --git a/setup.py b/setup.py
index 622d6de69..f96ebc440 100644
--- a/setup.py
+++ b/setup.py
@@ -48,7 +48,6 @@
             "accelerate=accelerate.commands.accelerate_cli:main",
             "accelerate-config=accelerate.commands.config:main",
             "accelerate-launch=accelerate.commands.launch:main",
-            "accelerate-default-config=accelerate.commands.config.default:main",
         ]
     },
     python_requires=">=3.7.0",
diff --git a/src/accelerate/commands/accelerate_cli.py b/src/accelerate/commands/accelerate_cli.py
index 8ffda3572..7716526c5 100644
--- a/src/accelerate/commands/accelerate_cli.py
+++ b/src/accelerate/commands/accelerate_cli.py
@@ -16,8 +16,7 @@
 
 from argparse import ArgumentParser
 
-from accelerate.commands.config import config_command_parser
-from accelerate.commands.config.default import default_command_parser
+from accelerate.commands.config import get_config_parser
 from accelerate.commands.env import env_command_parser
 from accelerate.commands.launch import launch_command_parser
 from accelerate.commands.test import test_command_parser
@@ -29,8 +28,7 @@ def main():
     subparsers = parser.add_subparsers(help="accelerate command helpers")
 
     # Register commands
-    config_command_parser(subparsers=subparsers)
-    default_command_parser(subparsers=subparsers)
+    get_config_parser(subparsers=subparsers)
     env_command_parser(subparsers=subparsers)
     launch_command_parser(subparsers=subparsers)
     tpu_command_parser(subparsers=subparsers)
diff --git a/src/accelerate/commands/config/__init__.py b/src/accelerate/commands/config/__init__.py
index 2400555c4..ba9d6cf30 100644
--- a/src/accelerate/commands/config/__init__.py
+++ b/src/accelerate/commands/config/__init__.py
@@ -15,73 +15,41 @@
 # limitations under the License.
 
 import argparse
-import os
 
-from accelerate.utils import ComputeEnvironment
+from .config import config_command, config_command_parser
+from .config_args import default_config_file, load_config_from_file  # noqa: F401
+from .default import default_command_parser, default_config_command
 
-from .cluster import get_cluster_input
-from .config_args import cache_dir, default_config_file, default_yaml_config_file, load_config_from_file  # noqa: F401
-from .config_utils import _ask_field, _ask_options, _convert_compute_environment  # noqa: F401
-from .sagemaker import get_sagemaker_input
 
+def filter_command_args(args: dict, args_prefix: str):
+    "Filters args while only keeping ones that are prefixed with `{args_prefix}.`"
+    new_args = argparse.Namespace()
+    for key, value in vars(args).items():
+        if key.startswith(args_prefix):
+            setattr(new_args, key.replace(f"{args_prefix}.", ""), value)
+    return new_args
 
-description = "Launches a series of prompts to create and save a `default_config.yaml` configuration file for your training system. Should always be ran first on your machine"
 
+def get_config_parser(subparsers=None):
+    parent_parser = argparse.ArgumentParser(add_help=False)
+    # The main config parser
+    config_parser = config_command_parser(subparsers)
 
-def get_user_input():
-    compute_environment = _ask_options(
-        "In which compute environment are you running?",
-        ["This machine", "AWS (Amazon SageMaker)"],
-        _convert_compute_environment,
-    )
-    if compute_environment == ComputeEnvironment.AMAZON_SAGEMAKER:
-        config = get_sagemaker_input()
-    else:
-        config = get_cluster_input()
-    return config
+    # Then add other parsers with the parent parser
+    default_parser = default_command_parser(config_parser, parents=[parent_parser])  # noqa: F841
 
-
-def config_command_parser(subparsers=None):
-    if subparsers is not None:
-        parser = subparsers.add_parser("config", description=description)
-    else:
-        parser = argparse.ArgumentParser("Accelerate config command", description=description)
-
-    parser.add_argument(
-        "--config_file",
-        default=None,
-        help=(
-            "The path to use to store the config file. Will default to a file named default_config.yaml in the cache "
-            "location, which is the content of the environment `HF_HOME` suffixed with 'accelerate', or if you don't have "
-            "such an environment variable, your cache directory ('~/.cache' or the content of `XDG_CACHE_HOME`) suffixed "
-            "with 'huggingface'."
-        ),
-    )
-
-    if subparsers is not None:
-        parser.set_defaults(func=config_command)
-    return parser
-
-
-def config_command(args):
-    config = get_user_input()
-    if args.config_file is not None:
-        config_file = args.config_file
-    else:
-        if not os.path.isdir(cache_dir):
-            os.makedirs(cache_dir)
-        config_file = default_yaml_config_file
-
-    if config_file.endswith(".json"):
-        config.to_json_file(config_file)
-    else:
-        config.to_yaml_file(config_file)
+    return config_parser
 
 
 def main():
-    parser = config_command_parser()
-    args = parser.parse_args()
-    config_command(args)
+    config_parser = get_config_parser()
+    args = config_parser.parse_args()
+    if not args.default:
+        args = filter_command_args(args, "config_args")
+        config_command(args)
+    elif args.default:
+        args = filter_command_args(args, "default_args")
+        default_config_command(args)
 
 
 if __name__ == "__main__":
diff --git a/src/accelerate/commands/config/config.py b/src/accelerate/commands/config/config.py
new file mode 100644
index 000000000..b504f07ad
--- /dev/null
+++ b/src/accelerate/commands/config/config.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python
+
+# Copyright 2021 The HuggingFace Team. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import argparse
+import os
+
+from accelerate.utils import ComputeEnvironment
+
+from .cluster import get_cluster_input
+from .config_args import cache_dir, default_config_file, default_yaml_config_file, load_config_from_file  # noqa: F401
+from .config_utils import (  # noqa: F401
+    GroupedAction,
+    SubcommandHelpFormatter,
+    _ask_field,
+    _ask_options,
+    _convert_compute_environment,
+)
+from .sagemaker import get_sagemaker_input
+
+
+description = "Launches a series of prompts to create and save a `default_config.yaml` configuration file for your training system. Should always be ran first on your machine"
+
+
+def get_user_input():
+    compute_environment = _ask_options(
+        "In which compute environment are you running?",
+        ["This machine", "AWS (Amazon SageMaker)"],
+        _convert_compute_environment,
+    )
+    if compute_environment == ComputeEnvironment.AMAZON_SAGEMAKER:
+        config = get_sagemaker_input()
+    else:
+        config = get_cluster_input()
+    return config
+
+
+def config_command_parser(subparsers=None):
+    if subparsers is not None:
+        parser = subparsers.add_parser("config", description=description, formatter_class=SubcommandHelpFormatter)
+    else:
+        parser = argparse.ArgumentParser(
+            "Accelerate config command", description=description, formatter_class=SubcommandHelpFormatter
+        )
+
+    parser.add_argument(
+        "--config_file",
+        default=None,
+        dest="config_args.config_file",
+        metavar="CONFIG_FILE",
+        action=GroupedAction,
+        help=(
+            "The path to use to store the config file. Will default to a file named default_config.yaml in the cache "
+            "location, which is the content of the environment `HF_HOME` suffixed with 'accelerate', or if you don't have "
+            "such an environment variable, your cache directory ('~/.cache' or the content of `XDG_CACHE_HOME`) suffixed "
+            "with 'huggingface'."
+        ),
+    )
+
+    if subparsers is not None:
+        parser.set_defaults(func=config_command)
+    return parser
+
+
+def config_command(args):
+    config = get_user_input()
+    if args.config_file is not None:
+        config_file = args.config_file
+    else:
+        if not os.path.isdir(cache_dir):
+            os.makedirs(cache_dir)
+        config_file = default_yaml_config_file
+
+    if config_file.endswith(".json"):
+        config.to_json_file(config_file)
+    else:
+        config.to_yaml_file(config_file)
+
+
+def main():
+    parser = config_command_parser()
+    args = parser.parse_args()
+    config_command(args)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/src/accelerate/commands/config/config_utils.py b/src/accelerate/commands/config/config_utils.py
index def29fe06..1deee9f32 100644
--- a/src/accelerate/commands/config/config_utils.py
+++ b/src/accelerate/commands/config/config_utils.py
@@ -14,6 +14,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import argparse
+
 from ...utils.dataclasses import (
     ComputeEnvironment,
     DistributedType,
@@ -84,3 +86,32 @@ def _convert_sagemaker_distributed_mode(value):
 
 def _convert_yes_no_to_bool(value):
     return {"yes": True, "no": False}[value.lower()]
+
+
+class GroupedAction(argparse.Action):
+    """
+    Filters arguments into seperate namespace groups based on the first part of the argument name.
+    """
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        group, dest = self.dest.split(".", 2)
+        groupspace = getattr(namespace, group, argparse.Namespace())
+        setattr(groupspace, dest, values)
+        setattr(namespace, group, groupspace)
+
+
+class SubcommandHelpFormatter(argparse.RawDescriptionHelpFormatter):
+    """
+    A custom formatter that will remove the usage line from the help message for subcommands.
+    """
+
+    def _format_action(self, action):
+        parts = super()._format_action(action)
+        if action.nargs == argparse.PARSER:
+            parts = "\n".join(parts.split("\n")[1:])
+        return parts
+
+    def _format_usage(self, usage, actions, groups, prefix):
+        usage = super()._format_usage(usage, actions, groups, prefix)
+        usage = usage.replace("<command> [<args>] ", "")
+        return usage
diff --git a/src/accelerate/commands/config/default.py b/src/accelerate/commands/config/default.py
index 956c3d719..b87a1d45b 100644
--- a/src/accelerate/commands/config/default.py
+++ b/src/accelerate/commands/config/default.py
@@ -15,21 +15,69 @@
 # limitations under the License.
 
 import argparse
-
-from accelerate.utils import write_basic_config
-
-from .config_args import default_json_config_file
+from pathlib import Path
+
+import torch
+
+from .config_args import ClusterConfig, default_json_config_file
+from .config_utils import GroupedAction
+
+
+def write_basic_config(mixed_precision="no", save_location: str = default_json_config_file, dynamo_backend="no"):
+    """
+    Creates and saves a basic cluster config to be used on a local machine with potentially multiple GPUs. Will also
+    set CPU if it is a CPU-only machine.
+
+    Args:
+        mixed_precision (`str`, *optional*, defaults to "no"):
+            Mixed Precision to use. Should be one of "no", "fp16", or "bf16"
+        save_location (`str`, *optional*, defaults to `default_json_config_file`):
+            Optional custom save location. Should be passed to `--config_file` when using `accelerate launch`. Default
+            location is inside the huggingface cache folder (`~/.cache/huggingface`) but can be overriden by setting
+            the `HF_HOME` environmental variable, followed by `accelerate/default_config.yaml`.
+    """
+    path = Path(save_location)
+    path.parent.mkdir(parents=True, exist_ok=True)
+    if path.exists():
+        print(
+            f"Configuration already exists at {save_location}, will not override. Run `accelerate config` manually or pass a different `save_location`."
+        )
+        return
+    mixed_precision = mixed_precision.lower()
+    if mixed_precision not in ["no", "fp16", "bf16"]:
+        raise ValueError(f"`mixed_precision` should be one of 'no', 'fp16', or 'bf16'. Received {mixed_precision}")
+    config = {
+        "compute_environment": "LOCAL_MACHINE",
+        "mixed_precision": mixed_precision,
+        "dynamo_backend": dynamo_backend,
+    }
+    if torch.cuda.is_available():
+        num_gpus = torch.cuda.device_count()
+        config["num_processes"] = num_gpus
+        config["use_cpu"] = False
+        if num_gpus > 1:
+            config["distributed_type"] = "MULTI_GPU"
+        else:
+            config["distributed_type"] = "NO"
+    else:
+        num_gpus = 0
+        config["use_cpu"] = True
+        config["num_processes"] = 1
+        config["distributed_type"] = "NO"
+    if not path.exists():
+        config = ClusterConfig(**config)
+        config.to_json_file(path)
 
 
 description = "Create a default config file for Accelerate with only a few flags set."
 
 
-def default_command_parser(subparsers=None):
-    if subparsers is not None:
-        parser = subparsers.add_parser("default-config", description=description)
+def default_command_parser(parser=None, parents=None):
+    if parser is None and parents is None:
+        parser = argparse.ArgumentParser(description=description)
     else:
-        parser = argparse.ArgumentParser("Accelerate default-config command", description=description)
-
+        default_parser = parser.add_subparsers(title="subcommand {default}", dest="default", description=description)
+        parser = default_parser.add_parser("default", parents=parents)
     parser.add_argument(
         "--config_file",
         default=default_json_config_file,
@@ -39,7 +87,9 @@ def default_command_parser(subparsers=None):
             "such an environment variable, your cache directory ('~/.cache' or the content of `XDG_CACHE_HOME`) suffixed "
             "with 'huggingface'."
         ),
-        dest="save_location",
+        dest="default_args.save_location",
+        metavar="CONFIG_FILE",
+        action=GroupedAction,
     )
 
     parser.add_argument(
@@ -50,24 +100,14 @@ def default_command_parser(subparsers=None):
         "Choose between FP16 and BF16 (bfloat16) training. "
         "BF16 training is only supported on Nvidia Ampere GPUs and PyTorch 1.10 or later.",
         default="no",
+        dest="default_args.mixed_precision",
+        action=GroupedAction,
     )
-
-    if subparsers is not None:
-        parser.set_defaults(func=config_command)
+    parser.set_defaults(func=default_config_command)
     return parser
 
 
-def config_command(args):
+def default_config_command(args):
     args = vars(args)
     args.pop("func", None)
     write_basic_config(**args)
-
-
-def main():
-    parser = default_command_parser()
-    args = parser.parse_args()
-    config_command(args)
-
-
-if __name__ == "__main__":
-    main()
diff --git a/src/accelerate/utils/other.py b/src/accelerate/utils/other.py
index f1af373b6..a9b6f9d4b 100644
--- a/src/accelerate/utils/other.py
+++ b/src/accelerate/utils/other.py
@@ -14,12 +14,10 @@
 
 import os
 from contextlib import contextmanager
-from pathlib import Path
 
 import torch
 
-from ..commands.config.cluster import ClusterConfig
-from ..commands.config.config_args import default_json_config_file
+from ..commands.config.default import write_basic_config  # noqa: F401
 from ..state import AcceleratorState
 from .dataclasses import DistributedType
 from .imports import is_deepspeed_available, is_tpu_available
@@ -113,49 +111,3 @@ def get_pretty_name(obj):
     if hasattr(obj, "__name__"):
         return obj.__name__
     return str(obj)
-
-
-def write_basic_config(mixed_precision="no", save_location: str = default_json_config_file, dynamo_backend="no"):
-    """
-    Creates and saves a basic cluster config to be used on a local machine with potentially multiple GPUs. Will also
-    set CPU if it is a CPU-only machine.
-
-    Args:
-        mixed_precision (`str`, *optional*, defaults to "no"):
-            Mixed Precision to use. Should be one of "no", "fp16", or "bf16"
-        save_location (`str`, *optional*, defaults to `default_json_config_file`):
-            Optional custom save location. Should be passed to `--config_file` when using `accelerate launch`. Default
-            location is inside the huggingface cache folder (`~/.cache/huggingface`) but can be overriden by setting
-            the `HF_HOME` environmental variable, followed by `accelerate/default_config.yaml`.
-    """
-    path = Path(save_location)
-    path.parent.mkdir(parents=True, exist_ok=True)
-    if path.exists():
-        print(
-            f"Configuration already exists at {save_location}, will not override. Run `accelerate config` manually or pass a different `save_location`."
-        )
-        return
-    mixed_precision = mixed_precision.lower()
-    if mixed_precision not in ["no", "fp16", "bf16"]:
-        raise ValueError(f"`mixed_precision` should be one of 'no', 'fp16', or 'bf16'. Received {mixed_precision}")
-    config = {
-        "compute_environment": "LOCAL_MACHINE",
-        "mixed_precision": mixed_precision,
-        "dynamo_backend": dynamo_backend,
-    }
-    if torch.cuda.is_available():
-        num_gpus = torch.cuda.device_count()
-        config["num_processes"] = num_gpus
-        config["use_cpu"] = False
-        if num_gpus > 1:
-            config["distributed_type"] = "MULTI_GPU"
-        else:
-            config["distributed_type"] = "NO"
-    else:
-        num_gpus = 0
-        config["use_cpu"] = True
-        config["num_processes"] = 1
-        config["distributed_type"] = "NO"
-    if not path.exists():
-        config = ClusterConfig(**config)
-        config.to_json_file(path)


Review comments: body: ```suggestion
```
diff_hunk: @@ -15,73 +15,42 @@
 # limitations under the License.
 
 import argparse
-import os
 
-from accelerate.utils import ComputeEnvironment
+from .config import config_command, config_command_parser
+from .config_args import default_config_file, load_config_from_file  # noqa: F401
+from .default import default_command_parser, default_config_command
 
-from .cluster import get_cluster_input
-from .config_args import cache_dir, default_config_file, default_yaml_config_file, load_config_from_file  # noqa: F401
-from .config_utils import _ask_field, _ask_options, _convert_compute_environment  # noqa: F401
-from .sagemaker import get_sagemaker_input
 
+def filter_command_args(args: dict, args_prefix: str):
+    "Filters args while only keeping ones that are prefixed with `{args_prefix}.`"
+    new_args = argparse.Namespace()
+    for key, value in vars(args).items():
+        print(key, value)
body: is this required here anymore?
diff_hunk: @@ -14,12 +14,10 @@
 
 import os
 from contextlib import contextmanager
-from pathlib import Path
 
 import torch
 
-from ..commands.config.cluster import ClusterConfig
-from ..commands.config.config_args import default_json_config_file
+from ..commands.config.default import write_basic_config  # noqa: F401
body: Yep, this is the nit about making sure we can keep `from accelerate.utils import write_basic_config` 
diff_hunk: @@ -14,12 +14,10 @@
 
 import os
 from contextlib import contextmanager
-from pathlib import Path
 
 import torch
 
-from ..commands.config.cluster import ClusterConfig
-from ..commands.config.config_args import default_json_config_file
+from ..commands.config.default import write_basic_config  # noqa: F401

Discussion: body: _The documentation is not available anymore as the PR was closed or merged._