





from manim import *

class 							__SCREAMING_SNAKE_CASE       (  _a							):






							def 					_lowerCamelCase		(    self	):
														UpperCamelCase__					  =      Rectangle(height=0.5	,			width=0.5	)
														UpperCamelCase__					  =      Rectangle(height=0.46	,			width=0.46	).set_stroke(width=0	)

														UpperCamelCase__					  =      Rectangle(height=0.25	,			width=0.25	)

														UpperCamelCase__					  =      [mem.copy() for i in range(6	)]
														UpperCamelCase__					  =      [mem.copy() for i in range(6	)]
														UpperCamelCase__					  =      VGroup(*__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0	)
														UpperCamelCase__					  =      VGroup(*__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0	)
														UpperCamelCase__					  =      VGroup(__lowerCAmelCase	,			__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0	)
														UpperCamelCase__					  =      Text("""CPU"""	,			font_size=24	)
														UpperCamelCase__					  =      Group(__lowerCAmelCase	,			__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0.5	,			aligned_edge=__lowerCAmelCase	)
														cpu.move_to([-2.5, -0.5, 0]	)
														self.add(__lowerCAmelCase	)

														UpperCamelCase__					  =      [mem.copy() for i in range(4	)]
														UpperCamelCase__					  =      VGroup(*__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0	)
														UpperCamelCase__					  =      Text("""GPU"""	,			font_size=24	)
														UpperCamelCase__					  =      Group(__lowerCAmelCase	,			__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0.5	,			aligned_edge=__lowerCAmelCase	)
														gpu.move_to([-1, -1, 0]	)
														self.add(__lowerCAmelCase	)

														UpperCamelCase__					  =      [mem.copy() for i in range(6	)]
														UpperCamelCase__					  =      VGroup(*__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0	)

														UpperCamelCase__					  =      Text("""Model"""	,			font_size=24	)
														UpperCamelCase__					  =      Group(__lowerCAmelCase	,			__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0.5	,			aligned_edge=__lowerCAmelCase	)
														model.move_to([3, -1.0, 0]	)
														self.add(__lowerCAmelCase	)

														UpperCamelCase__					  =      []
														UpperCamelCase__					  =      []

														for i, rect in enumerate(__lowerCAmelCase	):
																					UpperCamelCase__					  =      fill.copy().set_fill(__lowerCAmelCase	,			opacity=0.8	)
																					target.move_to(__lowerCAmelCase	)
																					model_arr.append(__lowerCAmelCase	)

																					UpperCamelCase__					  =      Rectangle(height=0.46	,			width=0.46	).set_stroke(width=0.0	).set_fill(__lowerCAmelCase	,			opacity=0.8	)
																					cpu_target.move_to(cpu_left_col_base[i]	)
																					model_cpu_arr.append(__lowerCAmelCase	)

														self.add(*__lowerCAmelCase	,			*__lowerCAmelCase	)

														UpperCamelCase__					  =      [meta_mem.copy() for i in range(6	)]
														UpperCamelCase__					  =      [meta_mem.copy() for i in range(6	)]
														UpperCamelCase__					  =      VGroup(*__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0	)
														UpperCamelCase__					  =      VGroup(*__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0	)
														UpperCamelCase__					  =      VGroup(__lowerCAmelCase	,			__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0	)
														UpperCamelCase__					  =      Text("""Disk"""	,			font_size=24	)
														UpperCamelCase__					  =      Group(__lowerCAmelCase	,			__lowerCAmelCase	).arrange(__lowerCAmelCase	,			buff=0.5	,			aligned_edge=__lowerCAmelCase	)
														disk.move_to([-4, -1.25, 0]	)
														self.add(__lowerCAmelCase	,			__lowerCAmelCase	)

														UpperCamelCase__					  =      Square(side_length=2.2	)
														key.move_to([-5, 2, 0]	)

														UpperCamelCase__					  =      MarkupText(
														    f"""<b>Key:</b>\n\n<span fgcolor='{YELLOW}'>●</span> Empty Model"""	,			font_size=18	,			)

														key_text.move_to([-5, 2.4, 0]	)

														self.add(__lowerCAmelCase	,			__lowerCAmelCase	)

														UpperCamelCase__					  =      MarkupText(
														    f"""<span fgcolor='{BLUE}'>●</span> Checkpoint"""	,			font_size=18	,			)

														blue_text.next_to(__lowerCAmelCase	,			DOWN * 2.4	,			aligned_edge=key_text.get_left()	)
														self.add(__lowerCAmelCase	)

														UpperCamelCase__					  =      MarkupText(
														    f"""Now watch as an input is passed through the model\nand how the memory is utilized and handled."""	,			font_size=24	,			)
														step_a.move_to([2, 2, 0]	)

														self.play(Write(__lowerCAmelCase	)	)

														UpperCamelCase__					  =      Square(0.3	)
														input.set_fill(__lowerCAmelCase	,			opacity=1.0	)
														input.set_stroke(width=0.0	)
														input.next_to(model_base[0]	,			__lowerCAmelCase	,			buff=0.5	)

														self.play(Write(__lowerCAmelCase	)	)

														input.generate_target()
														input.target.next_to(model_arr[0]	,			direction=__lowerCAmelCase	,			buff=0.02	)
														self.play(MoveToTarget(__lowerCAmelCase	)	)

														self.play(FadeOut(__lowerCAmelCase	)	)

														UpperCamelCase__					  =      Arrow(start=__lowerCAmelCase	,			end=__lowerCAmelCase	,			color=__lowerCAmelCase	,			buff=0.5	)
														a.next_to(model_arr[0].get_left()	,			__lowerCAmelCase	,			buff=0.2	)

														model_cpu_arr[0].generate_target()
														model_cpu_arr[0].target.move_to(gpu_rect[0]	)

														UpperCamelCase__					  =      MarkupText(
														    f"""As the input reaches a layer, the hook triggers\nand weights are moved from the CPU\nto the GPU and back."""	,			font_size=24	,			)
														step_a.move_to([2, 2, 0]	)

														self.play(Write(__lowerCAmelCase	,			run_time=3	)	)

														UpperCamelCase__					  =      {"""run_time""": 1, """fade_in""": True, """fade_out""": True, """buff""": 0.02}

														self.play(
														    Write(__lowerCAmelCase	)	,			Circumscribe(model_arr[0]	,			color=__lowerCAmelCase	,			**__lowerCAmelCase	)	,			Circumscribe(model_cpu_arr[0]	,			color=__lowerCAmelCase	,			**__lowerCAmelCase	)	,			Circumscribe(gpu_rect[0]	,			color=__lowerCAmelCase	,			**__lowerCAmelCase	)	,			)
														self.play(MoveToTarget(model_cpu_arr[0]	)	)

														UpperCamelCase__					  =      a.copy()
														for i in range(6	):
																					a_c.next_to(model_arr[i].get_right() + 0.02	,			__lowerCAmelCase	,			buff=0.2	)

																					input.generate_target()
																					input.target.move_to(model_arr[i].get_right() + 0.02	)

																					UpperCamelCase__					  =      AnimationGroup(
																					    FadeOut(__lowerCAmelCase	,			run_time=0.5	)	,			MoveToTarget(__lowerCAmelCase	,			run_time=0.5	)	,			FadeIn(__lowerCAmelCase	,			run_time=0.5	)	,			lag_ratio=0.2	)

																					self.play(__lowerCAmelCase	)

																					model_cpu_arr[i].generate_target()
																					model_cpu_arr[i].target.move_to(cpu_left_col_base[i]	)

																					if i < 5:
																												model_cpu_arr[i + 1].generate_target()
																												model_cpu_arr[i + 1].target.move_to(gpu_rect[0]	)
																												if i >= 1:
																																			UpperCamelCase__					  =      0.7

																												self.play(
																												    Circumscribe(model_arr[i]	,			**__lowerCAmelCase	)	,			Circumscribe(cpu_left_col_base[i]	,			**__lowerCAmelCase	)	,			Circumscribe(cpu_left_col_base[i + 1]	,			color=__lowerCAmelCase	,			**__lowerCAmelCase	)	,			Circumscribe(gpu_rect[0]	,			color=__lowerCAmelCase	,			**__lowerCAmelCase	)	,			Circumscribe(model_arr[i + 1]	,			color=__lowerCAmelCase	,			**__lowerCAmelCase	)	,			)
																												if i < 1:
																																			self.play(
																																			    MoveToTarget(model_cpu_arr[i]	)	,			MoveToTarget(model_cpu_arr[i + 1]	)	,			)
																												else:
																																			self.play(
																																			    MoveToTarget(model_cpu_arr[i]	,			run_time=0.7	)	,			MoveToTarget(model_cpu_arr[i + 1]	,			run_time=0.7	)	,			)
																					else:
																												model_cpu_arr[i].generate_target()
																												model_cpu_arr[i].target.move_to(cpu_left_col_base[-1]	)
																												input.generate_target()
																												input.target.next_to(model_arr[-1].get_right()	,			RIGHT + 0.02	,			buff=0.2	)

																												self.play(
																												    Circumscribe(model_arr[-1]	,			color=__lowerCAmelCase	,			**__lowerCAmelCase	)	,			Circumscribe(cpu_left_col_base[-1]	,			color=__lowerCAmelCase	,			**__lowerCAmelCase	)	,			Circumscribe(gpu_rect[0]	,			color=__lowerCAmelCase	,			**__lowerCAmelCase	)	,			)

																												self.play(MoveToTarget(model_cpu_arr[i]	)	)

																					UpperCamelCase__					  =      a_c
																					UpperCamelCase__					  =      a_c.copy()

														input.generate_target()
														input.target.next_to(model_base[-1]	,			RIGHT + 0.02	,			buff=0.5	)
														self.play(
														    FadeOut(__lowerCAmelCase	)	,			FadeOut(__lowerCAmelCase	,			run_time=0.5	)	,			)

														UpperCamelCase__					  =      MarkupText(f"""Inference on a model too large for GPU memory\nis successfully completed."""	,			font_size=24	)
														step_a.move_to([2, 2, 0]	)

														self.play(Write(__lowerCAmelCase	,			run_time=3	)	,			MoveToTarget(__lowerCAmelCase	)	)

														self.wait()











from ...configuration_utils import PretrainedConfig
from ...utils import logging


UpperCamelCase__           =			logging.get_logger(__name__)

UpperCamelCase__           =			{
    "tanreinama/GPTSAN-2.8B-spout_is_uniform": (
        "https://huggingface.co/tanreinama/GPTSAN-2.8B-spout_is_uniform/resolve/main/config.json"
    ),
}

class 							__SCREAMING_SNAKE_CASE       (  _a							):
							snake_case  :   Optional[Any]      =							"""gptsan-japanese"""
							snake_case  :   Any      =							[
							    """past_key_values""",
							]
							snake_case  :   str      =							{
							    """hidden_size""": """d_model""",
							    """num_attention_heads""": """num_heads""",
							    """num_hidden_layers""": """num_layers""",
							}






							def __init__(    self	,			__lowerCAmelCase=36000	,			__lowerCAmelCase=1280	,			__lowerCAmelCase=1024	,			__lowerCAmelCase=8192	,			__lowerCAmelCase=4096	,			__lowerCAmelCase=128	,			__lowerCAmelCase=10	,			__lowerCAmelCase=0	,			__lowerCAmelCase=16	,			__lowerCAmelCase=16	,			__lowerCAmelCase=128	,			__lowerCAmelCase=0.0	,			__lowerCAmelCase=1E-5	,			__lowerCAmelCase=False	,			__lowerCAmelCase=0.0	,			__lowerCAmelCase="float32"	,			__lowerCAmelCase=False	,			__lowerCAmelCase=False	,			__lowerCAmelCase=False	,			__lowerCAmelCase=0.002	,			__lowerCAmelCase=False	,			__lowerCAmelCase=True	,			__lowerCAmelCase=35998	,			__lowerCAmelCase=35995	,			__lowerCAmelCase=35999	,			**__lowerCAmelCase	,			):
														UpperCamelCase__					  =      vocab_size
														UpperCamelCase__					  =      max_position_embeddings
														UpperCamelCase__					  =      d_model
														UpperCamelCase__					  =      d_ff
														UpperCamelCase__					  =      d_ext
														UpperCamelCase__					  =      d_spout
														UpperCamelCase__					  =      num_switch_layers
														UpperCamelCase__					  =      num_ext_layers
														UpperCamelCase__					  =      num_switch_layers + num_ext_layers
														UpperCamelCase__					  =      num_heads
														UpperCamelCase__					  =      num_experts
														UpperCamelCase__					  =      expert_capacity
														UpperCamelCase__					  =      dropout_rate
														UpperCamelCase__					  =      layer_norm_epsilon
														UpperCamelCase__					  =      router_bias
														UpperCamelCase__					  =      router_jitter_noise
														UpperCamelCase__					  =      router_dtype
														UpperCamelCase__					  =      router_ignore_padding_tokens
														UpperCamelCase__					  =      output_hidden_states
														UpperCamelCase__					  =      output_attentions
														UpperCamelCase__					  =      initializer_factor
														UpperCamelCase__					  =      output_router_logits
														UpperCamelCase__					  =      use_cache

														super().__init__(
														    separator_token_id=__lowerCAmelCase	,			pad_token_id=__lowerCAmelCase	,			eos_token_id=__lowerCAmelCase	,			**__lowerCAmelCase	,			)




