code: 
  
  
  
  
  
  
  import argparse
  
  import runhouse as rh
  import torch
  from nlp_example import training_function
  
  from accelerate.utils import PrepareForLaunch, patch_environment
  def        UpperCAmelCase      (   *_lowercase      ):
  
  
      '''simple docstring'''
  
  
  
      _lowercase     =	torch.cuda.device_count()
      print(f'''Device count: {num_processes}'''      )
      with patch_environment(
          world_size=_lowercase,      master_addr='127.0.01',      master_port='29500',      mixed_precision=args[1].mixed_precision      ):
          _lowercase     =	PrepareForLaunch(_lowercase,      distributed_type='MULTI_GPU'      )
          torch.multiprocessing.start_processes(_lowercase,      args=_lowercase,      nprocs=_lowercase,      start_method='spawn'      )
  
  
  if __name__ == "__main__":
     # Refer to https://runhouse-docs.readthedocs-hosted.com/en/main/rh_primitives/cluster.html#hardware-setup
     # for cloud access setup instructions (if using on-demand hardware), and for API specifications.
  
     # on-demand GPU
     # gpu = rh.cluster(name='rh-cluster', instance_type='V100:1', provider='cheapest', use_spot=False)  # single GPU
     lowerCamelCase										=  rh.cluster(name='''rh-cluster''', instance_type='''V100:4''', provider='''cheapest''', use_spot=False)  # multi GPU
     gpu.up_if_not()
  
     # on-prem GPU
     # gpu = rh.cluster(
     #           ips=["ip_addr"], ssh_creds={ssh_user:"<username>", ssh_private_key:"<key_path>"}, name="rh-cluster"
     #       )
  
     # Set up remote function
     lowerCamelCase										=  [
         '''pip:./''',
         '''transformers''',
         '''datasets''',
         '''evaluate''',
         '''tqdm''',
         '''scipy''',
         '''scikit-learn''',
         '''tensorboard''',
         '''torch --upgrade --extra-index-url https://download.pytorch.org/whl/cu117''',
     ]
     lowerCamelCase										=  rh.function(fn=launch_train, system=gpu, reqs=reqs, name='''train_bert_glue''')
  
     # Define train args/config, run train function
     lowerCamelCase										=  argparse.Namespace(cpu=False, mixed_precision='''fp16''')
     lowerCamelCase										=  {'''lr''': 2E-5, '''num_epochs''': 3, '''seed''': 42, '''batch_size''': 16}
     launch_train_gpu(config, train_args, stream_logs=True)
  
     # Alternatively, we can just run as instructed in the README (but only because there's already a wrapper CLI):
     # gpu.install_packages(reqs)
     # gpu.run(['accelerate launch --multi_gpu accelerate/examples/nlp_example.py'])
  
style_context: 
  
  
  
  
  
  
  from __future__ import annotations
  def        UpperCAmelCase      (   _lowercase,      _lowercase      ):
  
  
      '''simple docstring'''
  
  
  
      _lowercase     =	[None] * (len(_lowercase      ) + len(_lowercase      ))
  
      _lowercase     =	0  # pointer to current index for left Half
      _lowercase     =	0  # pointer to current index for the right Half
      _lowercase     =	0  # pointer to current index for the sorted array Half
  
      while pointera < len(_lowercase      ) and pointera < len(_lowercase      ):
          if left_half[pointera] < right_half[pointera]:
              _lowercase     =	left_half[pointera]
              pointera += 1
              index += 1
          else:
              _lowercase     =	right_half[pointera]
              pointera += 1
              index += 1
      while pointera < len(_lowercase      ):
          _lowercase     =	left_half[pointera]
          pointera += 1
          index += 1
  
      while pointera < len(_lowercase      ):
          _lowercase     =	right_half[pointera]
          pointera += 1
          index += 1
  
      return sorted_array
  def        UpperCAmelCase      (   _lowercase      ):
  
  
      '''simple docstring'''
  
  
  
      if len(_lowercase      ) <= 1:
          return array
      # the actual formula to calculate the middle element = left + (right - left) // 2
      # this avoids integer overflow in case of large N
      _lowercase     =	0 + (len(_lowercase      ) - 0) // 2
  
      # Split the array into halves till the array length becomes equal to One
      # merge the arrays of single length returned by mergeSort function and
      # pass them into the merge arrays function which merges the array
      _lowercase     =	array[:middle]
      _lowercase     =	array[middle:]
  
      return merge(merge_sort(_lowercase      ),      merge_sort(_lowercase      )      )
  
  
  if __name__ == "__main__":
     import doctest
  
     doctest.testmod()
  