




'''simple docstring'''







# 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.

from pathlib import Path

import torch

from ...utils import is_npu_available, is_xpu_available
from .config_args import ClusterConfig, default_json_config_file
from .config_utils import SubcommandHelpFormatter


lowerCAmelCase_     						=				'''Create a default config file for Accelerate with only a few flags set.'''







def 						_A      ( UpperCAmelCase="no"      ,UpperCAmelCase = default_json_config_file      ,UpperCAmelCase = False						):






   '''simple docstring'''







   A__       =     Path(UpperCAmelCase						)
   path.parent.mkdir(parents=UpperCAmelCase      ,exist_ok=UpperCAmelCase						)
   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 False
   A__       =     mixed_precision.lower()
   if mixed_precision not in ["no", "fp16", "bf16", "fp8"]:
      raise ValueError(
          F"""`mixed_precision` should be one of 'no', 'fp16', 'bf16', or 'fp8'. Received {mixed_precision}"""						)
   A__       =     {
       'compute_environment': 'LOCAL_MACHINE',
       'mixed_precision': mixed_precision,
   }
   if torch.cuda.is_available():
      A__       =     torch.cuda.device_count()
      A__       =     num_gpus
      A__       =     False
      if num_gpus > 1:
         A__       =     'MULTI_GPU'
      else:
         A__       =     'NO'
   elif is_xpu_available() and use_xpu:
      A__       =     torch.xpu.device_count()
      A__       =     num_xpus
      A__       =     False
      if num_xpus > 1:
         A__       =     'MULTI_XPU'
      else:
         A__       =     'NO'
   elif is_npu_available():
      A__       =     torch.npu.device_count()
      A__       =     num_npus
      A__       =     False
      if num_npus > 1:
         A__       =     'MULTI_NPU'
      else:
         A__       =     'NO'
   else:
      A__       =     0
      A__       =     True
      A__       =     1
      A__       =     'NO'
   A__       =     ClusterConfig(**UpperCAmelCase						)
   config.to_json_file(UpperCAmelCase						)
   return path







def 						_A      ( UpperCAmelCase      ,UpperCAmelCase						):






   '''simple docstring'''







   A__       =     parser.add_parser('default'      ,parents=UpperCAmelCase      ,help=UpperCAmelCase      ,formatter_class=UpperCAmelCase						)
   parser.add_argument(
       '--config_file'      ,default=UpperCAmelCase      ,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\'.'
       )      ,dest='save_location'      ,)

   parser.add_argument(
       '--mixed_precision'      ,choices=['no', 'fp16', 'bf16']      ,type=UpperCAmelCase      ,help='Whether or not to use mixed precision training. '
       'Choose between FP16 and BF16 (bfloat16) training. '
       'BF16 training is only supported on Nvidia Ampere GPUs and PyTorch 1.10 or later.'      ,default='no'      ,)
   parser.set_defaults(func=UpperCAmelCase						)
   return parser







def 						_A      ( UpperCAmelCase						):






   '''simple docstring'''







   A__       =     write_basic_config(args.mixed_precision      ,args.save_location						)
   if config_file:
      print(F"""accelerate configuration saved at {config_file}"""						)








'''simple docstring'''







from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_sentencepiece_available


lowerCAmelCase_     						=				{}

try:
    if not is_sentencepiece_available():
        raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
    pass
else:
    lowerCAmelCase_     						=				['''GPTSw3Tokenizer''']


if TYPE_CHECKING:
    try:
        if not is_sentencepiece_available():
            raise OptionalDependencyNotAvailable()
    except OptionalDependencyNotAvailable:
        pass
    else:
        from .tokenization_gpt_swa import GPTSwaTokenizer

else:
    import sys

    lowerCAmelCase_     						=				_LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)


