



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  data-css-features="site_disable_smooth_scrolling"
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-fa5e2e82e6e0ecc0.js","react-dom":"https://github.githubassets.com/assets/react-dom-c7f52540bb6b77ed.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-35b308126995de85.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-fa5e2e82e6e0ecc0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-c7f52540bb6b77ed.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-35b308126995de85.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-3a3d2c708970e4e8.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-9c7b506bdc5ea73f.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-c9dacb4ec19616db.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-5ef38214a3eabc7d.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-3a3d2c708970e4e8.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-9c7b506bdc5ea73f.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-3862d92e8cad06f0.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-554f83c57e146400.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-8a8312bd5594c79a.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-26b9d9807a0334fb.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-c9dacb4ec19616db.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-5ef38214a3eabc7d.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-bea0b289618fbfb6.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-fe483dca5ad67edd.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-7d4b8c531c77a24a.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-edfb3968733aaf25.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-1f24e8126354e7aa.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-bb55737dcb13dc9b.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-02e066689466a8cd.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-38ae573fa780d76a.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-58d1122073b19732.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-11ab453cdcc1b7c1.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-542ca59b4b92999d.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-b25a4886e30e3e5f.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","actions_runners_react_view","actions_workflows_react_toggle","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","ahp_v1_wire_protocol","alternate_user_config_repo","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_scanning_ai_scan_button_v2","code_view_raf_sticky_lines","code_view_skip_unchanged_wrap_preference","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","collab_docs_authorization","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_automation_continuous_history","copilot_automation_repo_mcp_servers","copilot_automations_pagination","copilot_background_shell_workbench","copilot_base_model_policy_row","copilot_chat_auto_mode_v2","copilot_chat_clear_model_selection_for_default_change","copilot_chat_persist_session_drafts","copilot_chat_vision_dotcom_chat_ga_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_hide_hovercard","copilot_immersive_task_hyperlinking","copilot_managed_settings_validation_file_links","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_feedback","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_agents_repository_task_detail","copilot_mission_control_agents_task_detail","copilot_mission_control_ahp_diff","copilot_mission_control_ahp_diff_workbench","copilot_mission_control_ahp_local_images","copilot_mission_control_awps_batching","copilot_mission_control_create_pull_request_client_tool","copilot_mission_control_early_stop","copilot_mission_control_environment_task_destination_startup","copilot_mission_control_environments_web_kickoff","copilot_mission_control_independent_mode_controls","copilot_mission_control_needs_attention","copilot_mission_control_pinned_tasks","copilot_mission_control_reasoning_effort","copilot_mission_control_reserved_sandbox_tasks","copilot_mission_control_reuse_project_workspace","copilot_mission_control_session_client_attribution","copilot_mission_control_session_metadata","copilot_mission_control_setup_steps_timing","copilot_mission_control_sticky_header","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_mission_control_use_api_gateway","copilot_org_policy_page_focus_mode","copilot_policy_ui_refresh","copilot_pr_chat_thread_persistence","copilot_quick_chat_default_chat_scope","copilot_quick_chat_project_sessions","copilot_quick_chat_recent_artifact_sessions","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_code_scanning_alert_trigger","copilot_swe_agent_dependabot_alert_trigger","copilot_swe_agent_discussion_comment_trigger","copilot_swe_agent_discussion_opened_trigger","copilot_swe_agent_discussion_updated_trigger","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_assigned_trigger","copilot_swe_agent_issue_closed_trigger","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_issue_labeled_trigger","copilot_swe_agent_issue_reopened_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_assigned_trigger","copilot_swe_agent_pull_request_closed_trigger","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_converted_to_draft_trigger","copilot_swe_agent_pull_request_labeled_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_ready_for_review_trigger","copilot_swe_agent_pull_request_reopened_trigger","copilot_swe_agent_pull_request_review_dismissed_trigger","copilot_swe_agent_pull_request_review_requested_trigger","copilot_swe_agent_pull_request_review_submitted_trigger","copilot_swe_agent_pull_request_review_thread_resolved_trigger","copilot_swe_agent_pull_request_review_thread_unresolved_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_secret_scanning_alert_trigger","copilot_swe_agent_sub_issue_added_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_workbench_sunset_redirect","dashboard_agents_module_auth_token_check","fgpat_permissions_selector_redesign","glc_code_quality_repo_settings_workflow_config","global_issues_filtered_list_layout","global_nav_user_menu_fetch_on_intent","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_ubb_individual_budget_banner","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_team_vs_personal","issue_relative_time_micro","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_lazy_load_comment_box_suggestions","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_cookie_consent_banner","marketing_pages_search_explore_provider","marketplace_sidebar_layout","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_header_feedback","milestone_closed_issues_prioritization","octocaptcha_origin_optimization","one_copilot_chat_owner_split_picker","one_copilot_chat_queue_submit_while_reconnecting","one_copilot_grouped_tool_calls","one_copilot_simplified_environment_picker","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","primer_react_timeline_list_semantics","prs_contextual_comment_controls","prs_copilot_app_open_action","prs_css_anchor_positioning","prs_interweave_commits_into_comments","prs_url_search_param_panels","pull_request_copilot_attribution_header","pull_request_file_tree_prefetch_on_hover_50ms","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_navigation_shortcuts","pull_request_virtualization_image_estimate","pull_request_virtualization_loader_batching","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","pull_requests_deferred_highlight_fallback","pull_requests_persistent_whitespace_preferences","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_nonblocking_revalidation","react_data_router_tanstack_allowed","react_query_props_with_key","react_sandbox_future_tanstack","repo_app_turbo","repo_deployments_sidebar_layout","repo_issues_sidebar_layout","repo_pulls_dashboard_merge_queue_link","repos_contributors_limited_default_range","review_involves_filter","rulesets_actor_list_editor","sample_network_conn_type","secret_scanning_public_monitoring_hide_validity_coming_soon","security_center_artifact_filters_popover","see_who_reacted","selector_observer_skip_detached_adds","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_landing_pages_stable_canvas_position","speculation_rules_ui_service","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","trusted_types_policies","turbo_link_eligibility_optimization","ui_service_code_view_budget_banner_eligibility","ui_service_code_view_overview_data","universe26_banners_virt","update_issue_suggestions","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workstream_plugin_bootstrap"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-141c17800ca6ba23.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-e6eb71b50aa3db90.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-799625033ee8341e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-24d1e3019d231636.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-27ed50f7568a5f72.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-2defe2918d9c9884.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-e1773fc4c5a5ee0b.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.47c2032941ed0c3c.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-5bc36fa5a846f5a0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-7ae05416e4a383ae.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-a7b7e0f1360ca8f9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by4-04f0d28829dc4df0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-b94de714266ba389.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3h2-5f8899065b81d778.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t2-19741658de225445.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z8j-d8f6fa7339115370.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hjg-55b6d77c48226433.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wc-9718c61e184d7417.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-b97ce6d485234500.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-bbca0eaed1ea1095.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-26f2970b9e869a17.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-e0f60f15396869e3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-a82e6cb07443fd1c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-64258d9ba65c8c5a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/cc-99eedace671eb2b6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/urv-453c749eec9d7d37.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t-f1181f796eb9ea15.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pb0-3a1794e99794195c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6n-e6e586acca87c769.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z-b2cf9f86cb4bed3b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9k-9938b9e1b5d2f0d0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0r-4a2b771052825f69.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ow-98d10140e8228c74.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/mv-2c0d46e691479ec1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/eou-b91079b9ea7074de.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/eon-36af335a1906af16.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/yga-dd50cf95593467fe.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-8cb4c4cc377e2d47.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.c2407ba3ce2b1978.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-ed07bff73ca578de.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-911369ee234690ef.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/nc-28ebfc8e58bca42f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/qmp-308230626a2aedb0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/to-b501df3e06c1799a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-423469c05c948a8b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4u-bf6e08201764cb0a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/s07-527b0afa5c76403e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fe-f8365f29462c346a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zd-61606dd1c14634aa.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7v5-d77d961bce5db1f3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/15-627ae2a5640b1bab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5w-452c3a937483ff49.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-27ea91f01fa7ffcf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y0-02339f2a1b7b69ad.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t9-28dc4f6af25a5400.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/20-c4fa69654eec9c7a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a68-c67bfbb035a5cd79.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3s-ebbc335534e40b2a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/cnq-00f06287d057a2b3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gw-4bf343b417f9ec19.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0-8683d136d595e7ee.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jn-9c45b198d99a47c8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/q6j-256bc816dd682a0f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fn-a24b6dda102e437d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/i2-5e26ac37ee961d06.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b2-35e229a50d0f3d05.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pg-10c94bf4f9e9df2f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/lrk-ea49e115e48ba34b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/mlz-fce49bd96df2c99f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/dx-72390bda3ecf1bb9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sm-22346830d5e5a763.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-4cd875e44a87e9f6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pr-7e5e6964ac1c13a7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/up-2550cb0824072126.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gd-c0d7e6321e1379df.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/51-b582a312086b7975.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/c28-f2c3e9d4cd1ed8f5.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ti-dc598d1734870bb6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/stw-61e8fd83c623657f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/w77-0527a66a073ed15c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6g-b16e60ccff69b263.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-78021c04b029066e.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.dc074e1b2708fdd8.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/w77.25ab7aedc8e0cfc5.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.755dfb5b519b5384.module.css" />


  <title>cosmos-framework/docs/training.md at main · NVIDIA/cosmos-framework · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:d7f4e254-1923-90ff-9767-23ccdf22faf9">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="D432:3A6AF6:DFE532:1268682:6ADC7D7D" data-pjax-transient="true"/><meta name="html-safe-nonce" content="a70c0157a9f80965741bbc642d0bc26b7f1a54886c6925460641016509325f40" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJENDMyOjNBNkFGNjpERkU1MzI6MTI2ODY4Mjo2QURDN0Q3RCIsInZpc2l0b3JfaWQiOiIzNzk5NDg1ODYwMzQyOTU1Mzg5IiwicmVnaW9uX2VkZ2UiOiJmcmEiLCJyZWdpb25fcmVuZGVyIjoiZnJhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="47b66dc7cbbbf29146c5d4e9377bab1e9ed1efe910a14f4989fb4233107a9be3" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:1243757086" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="Our inference and training framework to run on the Cosmos Models - cosmos-framework/docs/training.md at main · NVIDIA/cosmos-framework">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/NVIDIA/cosmos-framework/blob/main/docs/training.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/9547ea03c4af019144f8812755058364e87bcb00a0ee662f7cf1e37220957a9c/NVIDIA/cosmos-framework" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="cosmos-framework/docs/training.md at main · NVIDIA/cosmos-framework" /><meta name="twitter:description" content="Our inference and training framework to run on the Cosmos Models - NVIDIA/cosmos-framework" />
  <meta property="og:image" content="https://opengraph.githubassets.com/9547ea03c4af019144f8812755058364e87bcb00a0ee662f7cf1e37220957a9c/NVIDIA/cosmos-framework" /><meta property="og:image:alt" content="Our inference and training framework to run on the Cosmos Models - NVIDIA/cosmos-framework" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="cosmos-framework/docs/training.md at main · NVIDIA/cosmos-framework" /><meta property="og:url" content="https://github.com/NVIDIA/cosmos-framework/blob/main/docs/training.md" /><meta property="og:description" content="Our inference and training framework to run on the Cosmos Models - NVIDIA/cosmos-framework" />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="7d8fa16435ae04e27a39b696328733f82328ca887e877161d9ee8e0b55c5822a" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="c1fb7e623a3445adf13b126b9a4e9c6c959567f2c234374a2df7062de1125e44" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="177e033949cafbe72bb749a4e9400308b68c9b6958fc23a6a7edc4a75e510853" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="d5da699858f6078b32f87897c570da974cb9e3d0aa20393dd0432bb067742ea4" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/NVIDIA/cosmos-framework git https://github.com/NVIDIA/cosmos-framework.git">

  <meta name="octolytics-dimension-user_id" content="1728152" /><meta name="octolytics-dimension-user_login" content="NVIDIA" /><meta name="octolytics-dimension-repository_id" content="1243757086" /><meta name="octolytics-dimension-repository_nwo" content="NVIDIA/cosmos-framework" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="1243757086" /><meta name="octolytics-dimension-repository_network_root_nwo" content="NVIDIA/cosmos-framework" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="5e1a76138af4c72fbadd723b0d36db8c66cd7319" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-240a3b08c2b74f23.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.dc074e1b2708fdd8.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.a7e873c5d56fafca.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/g6m-c6c2e85d4cbe6e0f.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-install-banner-partial-8e1eb389e6a9a11c.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.dc074e1b2708fdd8.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-install-banner-partial.39d1c8868e2681fb.module.css" />

<react-partial
  partial-name="app-install-banner-partial"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>


          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/h3j-5f947742bed6a5d9.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/qz-bc8ee8395fbadf86.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz-cb55e83c29d0a351.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/skl-90fea02d318d647f.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/h4-5f55e06e297293d6.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z7-54a4e2eade1aa26b.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a6j-32ec4660665b36c1.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-39db730d4411ab84.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.dc074e1b2708fdd8.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.605c0b537201e723.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/a6j.40fbb8aed1553149.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2FNVIDIA%2Fcosmos-framework%2Fblob%2Fmain%2Fdocs%2Ftraining.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=NVIDIA%2Fcosmos-framework","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/NVIDIA/cosmos-framework/blob/main/docs/training.md\",\"user_id\":null}}","auth_hydro_click_hmac":"32ad9c8f0a047bed9f9dacaaa1881cd3be4743954bedc06f45281f0fd821725e","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="root__q6pgdo HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="visuallyHidden__TIbnmb">Navigation Menu</h2><button type="button" class="backdrop__rMNFxs" aria-label="Close navigation menu"></button><div class="bar__cF4m1O"><div class="topRow__-dqkhM"><div class="toggleSlot__-ODxSX"><button type="button" class="toggle__kPg75-" aria-label="Toggle navigation" aria-expanded="false"><span class="toggleBar__8J10Uq"></span><span class="toggleBar__8J10Uq"></span><span class="toggleBar__8J10Uq"></span></button></div><a href="/" aria-label="Homepage" class="logo__bX9RKh" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="mobileActions__8F9jkX"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw cta__xkenoh" href="/login?return_to=https%3A%2F%2Fgithub.com%2FNVIDIA%2Fcosmos-framework%2Fblob%2Fmain%2Fdocs%2Ftraining.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/NVIDIA/cosmos-framework/blob/main/docs/training.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="32ad9c8f0a047bed9f9dacaaa1881cd3be4743954bedc06f45281f0fd821725e"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw trigger__VWDtQ2" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="menu__2EHTkB"><div class="menuWrapper__Vmk5KX"><nav class="nav__mHQXuz" aria-label="Global"><ul class="list__2Gh7vS"><li><div class="container__KHyzq4"><button type="button" class="button__qiVZaY" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right buttonIcon__44FXu9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="dropdown__jv_u56"><div><ul class="list__F2oFju"><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_5knd_">AI CODE CREATION</span><ul class="list__GYi3Jn" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Integrate external tools</span></span></a></li></ul></div></li><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="list__GYi3Jn" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_dknd_">APPLICATION SECURITY</span><ul class="list__GYi3Jn" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="group__i-sw4v hasSeparator__DZ8QkP"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_hknd_">EXPLORE</span><ul class="list__GYi3Jn" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="trailingLinkContainer__bY9qr5"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></div></li><li><div class="container__KHyzq4"><button type="button" class="button__qiVZaY" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right buttonIcon__44FXu9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="dropdown__jv_u56"><div><ul class="list__F2oFju"><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="list__GYi3Jn" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_9l7d_">BY USE CASE</span><ul class="list__GYi3Jn" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_dl7d_">BY INDUSTRY</span><ul class="list__GYi3Jn" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;see_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;see_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">See all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="trailingLinkContainer__bY9qr5"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></div></li><li><div class="container__KHyzq4"><button type="button" class="button__qiVZaY" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right buttonIcon__44FXu9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="dropdown__jv_u56"><div><ul class="list__F2oFju"><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="list__GYi3Jn" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="list__GYi3Jn" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="list__GYi3Jn" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="trailingLinkContainer__bY9qr5"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></div></li><li><div class="container__KHyzq4"><button type="button" class="button__qiVZaY" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right buttonIcon__44FXu9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="dropdown__jv_u56"><div><ul class="list__F2oFju"><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_5m7d_">COMMUNITY</span><ul class="list__GYi3Jn" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Fund open source developers</span></span></a></li></ul></div></li><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_9m7d_">PROGRAMS</span><ul class="list__GYi3Jn" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_dm7d_">REPOSITORIES</span><ul class="list__GYi3Jn" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></div></li><li><div class="container__KHyzq4"><button type="button" class="button__qiVZaY" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right buttonIcon__44FXu9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="dropdown__jv_u56"><div><ul class="list__F2oFju"><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="list__GYi3Jn" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="group__i-sw4v"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__g2f4Ur" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="list__GYi3Jn" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 link__3viuP9" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ title__MTYMi3"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion icon__Sf_Nku" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS subtitle__gxA0qn">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="navLink__HiENMw">Pricing</a></li></ul></nav><div class="ctaContainer__XiXTge"><div class="searchSlot__PLyIP2"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw trigger__A07fH5" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="content__-QV4lC"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search icon__dKfd-T" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="label__Axw9pp">Search</span><kbd class="kbd__-xAXYz" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthActions__J52IGi"><div class="signInWrap___-hg2x"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw cta__xkenoh desktopActionGap__qkQEsb hiddenBelowLg__f0ML96" href="/login?return_to=https%3A%2F%2Fgithub.com%2FNVIDIA%2Fcosmos-framework%2Fblob%2Fmain%2Fdocs%2Ftraining.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/NVIDIA/cosmos-framework/blob/main/docs/training.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="32ad9c8f0a047bed9f9dacaaa1881cd3be4743954bedc06f45281f0fd821725e"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw cta__xkenoh" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=NVIDIA%2Fcosmos-framework" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/NVIDIA/cosmos-framework/blob/main/docs/training.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="32ad9c8f0a047bed9f9dacaaa1881cd3be4743954bedc06f45281f0fd821725e"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw trigger__VWDtQ2" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div></div><div class="bottomBorder__38-D2c" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-3912d475-4250-45be-a468-37e2f3df2920" aria-labelledby="tooltip-a04acf25-c93e-4494-b6a8-dac41d2d6952" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-a04acf25-c93e-4494-b6a8-dac41d2d6952" for="icon-button-3912d475-4250-45be-a468-37e2f3df2920" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>






  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      
    


    








  

    <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/cn-7a4f85e8a901f4f7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0b-a7be65069037ffea.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t5-2c5d26edae56bda2.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5l-60d6b21dcbe3c5b7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/1a-76a60fd58c2fa34b.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/rk7-418a4f74edbc9f0d.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zxp-3431056caddba9d0.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9ty-47c453f28886426e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r3j-2177885dae8b60eb.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/1t-bdeb715d0c007303.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3j-c46f566649f3b4dc.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aj-7444763a0a51ca63.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sgn-de0af0b55144d4f4.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/li6-9946ed6b82f92046.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jvc-172b2b204ed5e8d3.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/global-nav-bar-ebf6a261f08dc70b.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.dc074e1b2708fdd8.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-nav-bar.3a0179cc872fc3d8.module.css" />

<react-partial
  partial-name="global-nav-bar"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"contextRegion":{"crumbs":[{"crumb_type":"organization","label":"NVIDIA","is_root":false,"href":"/NVIDIA"},{"crumb_type":"repository","label":"cosmos-framework","is_root":false,"href":"/NVIDIA/cosmos-framework"}],"localNavigation":[{"id":"code","icon":"code","label":"Code","href":"/NVIDIA/cosmos-framework","selectedLinks":["repo_source","repo_downloads","repo_commits","repo_releases","repo_tags","repo_branches","repo_packages","repo_deployments","repo_attestations"],"popoverTarget":false,"commandId":"repositories:go-to-code","reactNav":{"appTarget":"code-view","anchor":"code-view-repo-link"},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"issues","icon":"issue-opened","label":"Issues","href":"/NVIDIA/cosmos-framework/issues","selectedLinks":["repo_issues","repo_labels","repo_milestones"],"count":15,"popoverTarget":false,"commandId":"repositories:go-to-issues","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"pull-requests","icon":"git-pull-request","label":"Pull requests","href":"/NVIDIA/cosmos-framework/pulls","selectedLinks":["repo_pulls","checks"],"count":23,"popoverTarget":false,"commandId":"repositories:go-to-pull-requests","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"actions","icon":"play","label":"Actions","href":"/NVIDIA/cosmos-framework/actions","selectedLinks":["repo_actions"],"popoverTarget":false,"commandId":"repositories:go-to-actions","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"projects","icon":"table","label":"Projects","href":"/NVIDIA/cosmos-framework/projects","selectedLinks":["repo_projects","new_repo_project","repo_project"],"popoverTarget":false,"commandId":"repositories:go-to-projects","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"security-and-quality","icon":"shield","label":"Security and quality","href":"/NVIDIA/cosmos-framework/security","selectedLinks":["security","overview","alerts","policy","token_scanning","code_scanning"],"count":0,"popoverTarget":false,"commandId":"repositories:go-to-security","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"insights","icon":"graph","label":"Insights","href":"/NVIDIA/cosmos-framework/pulse","selectedLinks":["repo_graphs","repo_contributors","dependency_graph","dependabot_updates","pulse","people","community"],"popoverTarget":false,"commandId":"repositories:go-to-insights","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}}],"localNavigationUpdateChannel":null,"selectedLink":"repo_source"},"owner":null,"headerLogo":{"href":"/","aria-label":"Homepage "},"notifications":{"indicatorMode":"disabled","websocketChannel":null,"fetchIndicatorSrc":"/notifications/indicator","fetchIndicatorEnabled":false},"issues":{"href":"/issues"},"pulls":{"href":"/pulls"},"contributedRepos":{"href":"/repos"},"copilot":{"show":false,"showAgentsButton":false,"showRelaunchAnnouncement":false,"copilotChatUrl":null,"copilotApiUrl":"https://api.githubcopilot.com"},"search":{"show":true,"showCommandPalette":false,"isSearchPage":false,"isJumpToSearch":false,"searchContext":{"scope":"repo:NVIDIA/cosmos-framework","current_repo_name":"cosmos-framework","current_repo_nwo":"NVIDIA/cosmos-framework","current_repo_org":"NVIDIA","user_id":"NVIDIA"}},"commandPalette":null,"enterpriseBar":{"show":false},"globalTransactionalMessage":[],"payloadsUrl":"/_global-navigation/payloads.json?can_toggle_site_admin_and_employee_status=0\u0026is_admin_mode_on=0\u0026is_ui_opted_out=0\u0026show_ui_opt_out=0\u0026v=8","contextRegionUrl":"/_global-navigation/context-region.json"}}</script>
  <div data-target="react-partial.reactRoot"><header aria-label="Global navigation menu" data-component="Stack" class="GlobalNav appHeader__6OmbvL prc-Stack-Stack-UQ9k6" data-gap="none" data-direction="vertical" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="none"><div data-component="Stack" class="prc-Stack-Stack-UQ9k6" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="center" data-padding="none"><div data-testid="top-nav-center" data-component="Stack" class="center__f1ujjY withLocalNavigation__FzpnU6 loggedOut__--dPuC prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="normal"><nav class="contextRegion__Wb1-GR prc-Breadcrumbs-BreadcrumbsBase-3Gb-B" aria-label="Breadcrumbs" data-overflow="menu" data-variant="normal" data-component="Breadcrumbs"><ol class="prc-Breadcrumbs-BreadcrumbsList-BKjpe"><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="contextCrumb__Q8nET8 prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/NVIDIA" data-discover="true"><span class="">NVIDIA</span></a></li><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="contextCrumb__Q8nET8 prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/NVIDIA/cosmos-framework" data-discover="true"><span class="contextCrumbLast__l2P28s">cosmos-framework</span></a></li></ol></nav></div><div data-testid="top-nav-right" data-component="Stack" class="right__5m36ST withLocalNavigation__FzpnU6 rightWithResponsiveCreateButton__JePGAt prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="start" data-padding="normal"></div></div><h2 class="prc-src-InternalVisuallyHidden-2YaI6">Repository navigation</h2><nav class="prc-components-UnderlineWrapper-eT-Yj prc-UnderlineNav-UnderlineWrapper-GWONT LocalNavigation__QHRW7C" aria-label="Repository" data-variant="inset" data-overflow-mode="wrap" data-hide-icons-breakpoint="medium"><ul class="prc-UnderlineNav-ItemsList-oj8gN prc-components-UnderlineItemList-xKlKC" role="list"><li role="presentation" aria-hidden="true" class="prc-UnderlineNav-WrapSpacer--aLgz"></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a aria-current="page" data-tab-item="code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/NVIDIA/cosmos-framework" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text" data-content="Code">Code</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="issues" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/NVIDIA/cosmos-framework/issues" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg></span><span data-component="text" data-content="Issues">Issues</span><span data-component="counter"><span aria-hidden="true" data-variant="secondary" data-component="CounterLabel" class="prc-CounterLabel-CounterLabel-X-kRU">15</span><span class="prc-VisuallyHidden-VisuallyHidden-Q0qSB"> (<!-- -->15<!-- -->)</span></span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="pull-requests" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/NVIDIA/cosmos-framework/pulls" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-pull-request" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg></span><span data-component="text" data-content="Pull requests">Pull requests</span><span data-component="counter"><span aria-hidden="true" data-variant="secondary" data-component="CounterLabel" class="prc-CounterLabel-CounterLabel-X-kRU">23</span><span class="prc-VisuallyHidden-VisuallyHidden-Q0qSB"> (<!-- -->23<!-- -->)</span></span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="actions" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/NVIDIA/cosmos-framework/actions" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-play" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg></span><span data-component="text" data-content="Actions">Actions</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="projects" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/NVIDIA/cosmos-framework/projects" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-table" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path></svg></span><span data-component="text" data-content="Projects">Projects</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="security-and-quality" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/NVIDIA/cosmos-framework/security" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg></span><span data-component="text" data-content="Security and quality">Security and quality</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="insights" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/NVIDIA/cosmos-framework/pulse" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-graph" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg></span><span data-component="text" data-content="Insights">Insights</span></a></li></ul><div class="prc-UnderlineNav-MoreButtonContainer-Dnrq6"><div class="prc-UnderlineNav-MoreButtonDivider-dN0a-"></div><button data-component="overflow-menu-button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk prc-UnderlineNav-MoreButton-Y8soj" data-loading="false" data-size="medium" data-variant="invisible" id="_R_2ktp_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3"><span>More<span class="prc-src-InternalVisuallyHidden-2YaI6"> items</span></span></span></span><span data-component="trailingAction" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></button></div></nav><div class="d-none"></div></header></div>
</react-partial>


  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/NVIDIA/cosmos-framework/blob/main/docs/training.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":1,"text":"Post-Training (Supervised Fine-Tuning)","anchor":"post-training-supervised-fine-tuning","htmlText":"Post-Training (Supervised Fine-Tuning)"},{"level":2,"text":"Step 1 - Prepare data and config","anchor":"step-1---prepare-data-and-config","htmlText":"Step 1 - Prepare data and config"},{"level":2,"text":"Step 2 — Prepare checkpoint","anchor":"step-2--prepare-checkpoint","htmlText":"Step 2 — Prepare checkpoint"},{"level":2,"text":"Step 3 — Run training","anchor":"step-3--run-training","htmlText":"Step 3 — Run training"},{"level":3,"text":"Option A (recommended): the paired launch shell","anchor":"option-a-recommended-the-paired-launch-shell","htmlText":"Option A (recommended): the paired launch shell"},{"level":4,"text":"Overriding the defaults","anchor":"overriding-the-defaults","htmlText":"Overriding the defaults"},{"level":3,"text":"Option B: raw torchrun","anchor":"option-b-raw-torchrun","htmlText":"Option B: raw torchrun"},{"level":2,"text":"Outputs","anchor":"outputs","htmlText":"Outputs"},{"level":2,"text":"Hybrid video reasoning SFT","anchor":"hybrid-video-reasoning-sft","htmlText":"Hybrid video reasoning SFT"},{"level":2,"text":"Export checkpoint to Hugging Face safetensors","anchor":"export-checkpoint-to-hugging-face-safetensors","htmlText":"Export checkpoint to Hugging Face safetensors"},{"level":3,"text":"ViT / vision tower (Cosmos3-Edge)","anchor":"vit--vision-tower-cosmos3-edge","htmlText":"ViT / vision tower (Cosmos3-Edge)"},{"level":2,"text":"Convert to Diffusers","anchor":"convert-to-diffusers","htmlText":"Convert to Diffusers"},{"level":2,"text":"Config","anchor":"config","htmlText":"Config"},{"level":3,"text":"Common Hydra tail overrides","anchor":"common-hydra-tail-overrides","htmlText":"Common Hydra tail overrides"}]},"issueTemplate":null,"discussionTemplate":null,"richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePost-Training (Supervised Fine-Tuning)\u003c/h1\u003e\u003ca id=\"user-content-post-training-supervised-fine-tuning\" class=\"anchor\" aria-label=\"Permalink: Post-Training (Supervised Fine-Tuning)\" href=\"#post-training-supervised-fine-tuning\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003chr\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eTable of Contents\u003c/strong\u003e\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#step-1---prepare-data-and-config\"\u003eStep 1 - Prepare data and config\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#step-2--prepare-checkpoint\"\u003eStep 2 — Prepare checkpoint\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#step-3--run-training\"\u003eStep 3 — Run training\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#option-a-recommended-the-paired-launch-shell\"\u003eOption A (recommended): the paired launch shell\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#overriding-the-defaults\"\u003eOverriding the defaults\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#option-b-raw-torchrun\"\u003eOption B: raw \u003ccode\u003etorchrun\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#outputs\"\u003eOutputs\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#hybrid-video-reasoning-sft\"\u003eHybrid video reasoning SFT\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#export-checkpoint-to-hugging-face-safetensors\"\u003eExport checkpoint to Hugging Face safetensors\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#vit--vision-tower-cosmos3-edge\"\u003eViT / vision tower (Cosmos3-Edge)\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#convert-to-diffusers\"\u003eConvert to Diffusers\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#config\"\u003eConfig\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#common-hydra-tail-overrides\"\u003eCommon Hydra tail overrides\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\n\u003cp dir=\"auto\"\u003eFine-tune a pre-trained Cosmos3 model on your own dataset using supervised fine-tuning (SFT). Tested on 8× H100 (80 GB).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003ePrerequisites:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"/NVIDIA/cosmos-framework/blob/main/README.md#setup\"\u003eSetup\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/NVIDIA/cosmos-framework/blob/main/docs/environment_variables.md\"\u003eEnvironment Variables\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/NVIDIA/cosmos-framework/blob/main/docs/faq.md\"\u003eFAQ\u003c/a\u003e — troubleshooting (OOM during SFT, defaults), common pitfalls.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eThe runnable artifacts (TOML recipes, paired launch shells, inference helpers) live in \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/examples/README.md\"\u003e\u003ccode\u003eexamples/\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStep 1 - Prepare data and config\u003c/h2\u003e\u003ca id=\"user-content-step-1---prepare-data-and-config\" class=\"anchor\" aria-label=\"Permalink: Step 1 - Prepare data and config\" href=\"#step-1---prepare-data-and-config\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSome datasets are license gated — visit the repository page and accept any terms, and authenticate with \u003ccode\u003euvx hf@latest auth login\u003c/code\u003e (or set \u003ccode\u003eHF_TOKEN\u003c/code\u003e).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe per-recipe download commands below write to \u003ccode\u003eexamples/data/\u0026lt;dataset\u0026gt;/\u003c/code\u003e and \u003ccode\u003eexamples/checkpoints/wan22_vae/Wan2.2_VAE.pth\u003c/code\u003e, which match the launcher's default \u003ccode\u003e$DATASET_PATH\u003c/code\u003e and \u003ccode\u003e$WAN_VAE_PATH\u003c/code\u003e. See \u003ca href=\"#option-a-recommended-the-paired-launch-shell\"\u003eStep 3 → Option A\u003c/a\u003e for how to override these defaults if you'd rather keep data on a different filesystem.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSelect one of the following recipes:\u003c/p\u003e\n\u003cdetails open=\"\"\u003e\u003csummary\u003e\u003cb\u003eVision SFT (Cosmos3-Nano)\u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eT2V/I2V/V2V SFT on \u003ca href=\"https://huggingface.co/datasets/nvidia/BridgeData2-Subset-Synthetic-Captions/tree/main\" rel=\"nofollow\"\u003envidia/BridgeData2-Subset-Synthetic-Captions\u003c/a\u003e. \u003ccode\u003e$DATASET_PATH\u003c/code\u003e should be the directory containing \u003ccode\u003etrain/video_dataset_file.jsonl\u003c/code\u003e. Each clip carries a structured-JSON caption (\u003ccode\u003ecaption_json\u003c/code\u003e) — the model's native prompt format — which the SFT loader trains on by default (the dense narrative is kept as a backup), so training stays aligned with \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/docs/dataset_jsonl.md#inference\"\u003eInference\u003c/a\u003e; see \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/docs/dataset_jsonl.md#format\"\u003eJSONL Dataset → Format\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eLaunch shell: \u003ccode\u003eexamples/launch_sft_vision_nano.sh\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"BASE_CHECKPOINT_NAME=Cosmos3-Nano\n\n# Defaults match the launcher (see Step 3 → Option A to override).\nuvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \\\n    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \\\n    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet\nuvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \\\n    --local-dir examples/checkpoints/wan22_vae --quiet\"\u003e\u003cpre\u003eBASE_CHECKPOINT_NAME=Cosmos3-Nano\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Defaults match the launcher (see Step 3 → Option A to override).\u003c/span\u003e\nuvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \\\n    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \\\n    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet\nuvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \\\n    --local-dir examples/checkpoints/wan22_vae --quiet\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eVision SFT LoRA (Cosmos3-Super)\u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eLoRA SFT on Qwen3-VL-32B MoT (Cosmos3-Super), on the same Bridge dataset as \u003cstrong\u003eVision SFT (Cosmos3-Nano)\u003c/strong\u003e. Step 2 must convert the Cosmos3-Super checkpoint, not Cosmos3-Nano.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eLaunch shell: \u003ccode\u003eexamples/launch_sft_vision_super.sh\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"BASE_CHECKPOINT_NAME=Cosmos3-Super\n\n# Defaults match the launcher (see Step 3 → Option A to override).\nuvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \\\n    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \\\n    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet\nuvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \\\n    --local-dir examples/checkpoints/wan22_vae --quiet\"\u003e\u003cpre\u003eBASE_CHECKPOINT_NAME=Cosmos3-Super\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Defaults match the launcher (see Step 3 → Option A to override).\u003c/span\u003e\nuvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \\\n    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \\\n    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet\nuvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \\\n    --local-dir examples/checkpoints/wan22_vae --quiet\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eVision SFT (Cosmos3-Edge)\u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eFull fine-tune of the Nemotron-2B-Dense-VL backbone (Cosmos3-Edge), on the same Bridge dataset as \u003cstrong\u003eVision SFT (Cosmos3-Nano)\u003c/strong\u003e. Step 2 must convert the Cosmos3-Edge checkpoint, not Cosmos3-Nano.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eLaunch shell: \u003ccode\u003eexamples/launch_sft_vision_edge.sh\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"BASE_CHECKPOINT_NAME=Cosmos3-Edge\n\n# Defaults match the launcher (see Step 3 → Option A to override).\nuvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \\\n    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \\\n    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet\nuvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \\\n    --local-dir examples/checkpoints/wan22_vae --quiet\"\u003e\u003cpre\u003eBASE_CHECKPOINT_NAME=Cosmos3-Edge\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Defaults match the launcher (see Step 3 → Option A to override).\u003c/span\u003e\nuvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \\\n    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \\\n    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet\nuvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \\\n    --local-dir examples/checkpoints/wan22_vae --quiet\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eReasoner Alignment SFT with LLaVA-OneVision (vfm-vlm)\u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eAlignment SFT for the Reasoner variant on the \u003ca href=\"https://huggingface.co/datasets/lmms-lab/LLaVA-OneVision-Data\" rel=\"nofollow\"\u003elmms-lab/LLaVA-OneVision-Data\u003c/a\u003e dataset (streamed from HF Hub). Skips Step 2: by default the backbone \u003ccode\u003eQwen/Qwen3-VL-8B-Instruct\u003c/code\u003e is fetched from the HF Hub by the model downloader at startup — no DCP conversion needed and no required env vars. To instead start from a merged Cosmos3 reasoner snapshot (Cosmos3-Nano LM merged onto the Qwen3-VL visual tower), build it with \u003ccode\u003econvert_model_to_vlm_safetensors\u003c/code\u003e (see \u003ca href=\"#step-2--prepare-checkpoint\"\u003eStep 2\u003c/a\u003e) and point \u003ccode\u003eVLM_SAFETENSORS_PATH\u003c/code\u003e at it — same mechanism as the VideoPhy-2 recipe below.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eLaunch shell: \u003ccode\u003eexamples/launch_sft_llava_ov.sh\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# No required env vars. The first launch will populate the HF Hub cache under\n# $HF_HOME (defaults to /tmp/hf_cache inside the wrapper); subsequent launches\n# reuse the cached snapshot.\n#\n# (optional) HF_TOKEN raises HF Hub rate limits for the streamed dataset\n# revision lookup — useful if you're running 8-rank fan-out from a single IP:\n# export HF_TOKEN=hf_...\n#\n# (optional) VLM_SAFETENSORS_PATH starts training from a local pre-converted\n# Qwen3-VL safetensors snapshot (e.g. Cosmos3-Nano LM merged with the Qwen3-VL\n# visual tower) instead of the public HF backbone:\n# export VLM_SAFETENSORS_PATH=$PWD/examples/checkpoints/Cosmos3-Nano-VLM\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e No required env vars. The first launch will populate the HF Hub cache under\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e $HF_HOME (defaults to /tmp/hf_cache inside the wrapper); subsequent launches\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e reuse the cached snapshot.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e (optional) HF_TOKEN raises HF Hub rate limits for the streamed dataset\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e revision lookup — useful if you're running 8-rank fan-out from a single IP:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e export HF_TOKEN=hf_...\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e (optional) VLM_SAFETENSORS_PATH starts training from a local pre-converted\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Qwen3-VL safetensors snapshot (e.g. Cosmos3-Nano LM merged with the Qwen3-VL\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e visual tower) instead of the public HF backbone:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e export VLM_SAFETENSORS_PATH=$PWD/examples/checkpoints/Cosmos3-Nano-VLM\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Nano)\u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eReasoner alignment SFT for 1–5 physical-plausibility scoring on \u003ca href=\"https://huggingface.co/datasets/videophysics/videophy2_train\" rel=\"nofollow\"\u003evideophysics/videophy2_train\u003c/a\u003e (HF test split renamed to \u003ccode\u003evideophy2_val/\u003c/code\u003e). \u003ccode\u003e[job].task = \"vlm\"\u003c/code\u003e. Bootstraps from \u003ccode\u003eCosmos3-Nano\u003c/code\u003e's language-model weights merged onto the public Qwen3-VL-8B-Instruct visual tower; the merged HF directory is consumed via \u003ccode\u003e[model.backbone].safetensors_path\u003c/code\u003e (plumbed by \u003ccode\u003eVLM_SAFETENSORS_PATH\u003c/code\u003e).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eLaunch shell: \u003ccode\u003eexamples/launch_sft_videophy2_nano.sh\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Step 1 (data): materialize the public HF dataset into the canonical local layout\n# (videophy2_{train,val}/{meta.json, media/, text/}).\npython -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \\\n    --out_root examples/data/videophysics --split both\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Step 1 (data): materialize the public HF dataset into the canonical local layout\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e (videophy2_{train,val}/{meta.json, media/, text/}).\u003c/span\u003e\npython -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \\\n    --out_root examples/data/videophysics --split both\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Super)\u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eSuper-tier counterpart of the VideoPhy-2 recipe above: same 1–5 physical-plausibility scoring on \u003ca href=\"https://huggingface.co/datasets/videophysics/videophy2_train\" rel=\"nofollow\"\u003evideophysics/videophy2_train\u003c/a\u003e, but a full fine-tune of the 32B backbone. \u003ccode\u003e[job].task = \"vlm\"\u003c/code\u003e. Bootstraps from \u003ccode\u003eCosmos3-Super\u003c/code\u003e's language-model weights merged onto the public Qwen3-VL-32B-Instruct visual tower; the merged HF directory is consumed via \u003ccode\u003e[model.backbone].safetensors_path\u003c/code\u003e (plumbed by \u003ccode\u003eVLM_SAFETENSORS_PATH\u003c/code\u003e). Full-shard FSDP across all ranks, so it runs on a 4-GPU (e.g. GB200x4) or 8-GPU allocation.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eLaunch shell: \u003ccode\u003eexamples/launch_sft_videophy2_super.sh\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Step 1 (data): same as the nano recipe — materialize the public HF dataset into\n# the canonical local layout (videophy2_{train,val}/{meta.json, media/, text/}).\npython -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \\\n    --out_root examples/data/videophysics --split both\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Step 1 (data): same as the nano recipe — materialize the public HF dataset into\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e the canonical local layout (videophy2_{train,val}/{meta.json, media/, text/}).\u003c/span\u003e\npython -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \\\n    --out_root examples/data/videophysics --split both\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Edge)\u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eEdge-tier counterpart of the VideoPhy-2 recipe above: same 1–5 physical-plausibility scoring on \u003ca href=\"https://huggingface.co/datasets/videophysics/videophy2_train\" rel=\"nofollow\"\u003evideophysics/videophy2_train\u003c/a\u003e, but on the compact \u003cstrong\u003eNemotron-2B-Dense-VL\u003c/strong\u003e reasoner (SigLIP2 vision tower, \u003ccode\u003emodel_type = \"cosmos3_edge\"\u003c/code\u003e — native HF metadata, no remote code; the model classes are registered in-framework) instead of Qwen3-VL. \u003ccode\u003e[job].task = \"vlm\"\u003c/code\u003e. The vision tower is frozen; the projector + LM train at a uniform LR. \u003ccode\u003e[model.backbone].model_name\u003c/code\u003e is the \u003cstrong\u003epublic, ungated\u003c/strong\u003e omni release \u003ccode\u003envidia/Cosmos3-Edge\u003c/code\u003e, which supplies the arch/config/tokenizer \u003cstrong\u003eand\u003c/strong\u003e the reasoner weights: the training loader follows the snapshot's root safetensors index into its weight shards, so weights load directly from the download — no conversion step and no required weights env var. Like the nano/super recipes, \u003ccode\u003eVLM_SAFETENSORS_PATH\u003c/code\u003e is an optional override for loading from a local safetensors directory instead. The reasoner weights shipped inside \u003ccode\u003envidia/Cosmos3-Edge\u003c/code\u003e are the canonical Edge reasoner weights — there is no separate reasoner repo to download. Only 2B, so it runs on a 4-GPU (e.g. GB200x4) or 8-GPU allocation.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eLaunch shell: \u003ccode\u003eexamples/launch_sft_videophy2_edge.sh\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Step 1 (data): same as the nano recipe — materialize the public HF dataset into\n# the canonical local layout (videophy2_{train,val}/{meta.json, media/, text/}).\npython -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \\\n    --out_root examples/data/videophysics --split both\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Step 1 (data): same as the nano recipe — materialize the public HF dataset into\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e the canonical local layout (videophy2_{train,val}/{meta.json, media/, text/}).\u003c/span\u003e\npython -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \\\n    --out_root examples/data/videophysics --split both\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eAction-Policy Post-Training (DROID / LIBERO)\u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eRobot action-policy recipes: DROID (\u003ccode\u003ejoint_pos\u003c/code\u003e 8-D actions + proprioceptive state) and\nLIBERO (\u003ccode\u003eframe_wise_relative\u003c/code\u003e rot6d 10-D actions), both from Cosmos3-Nano. They follow the same Step 2/Step 3 flow below, with their own data staging\n(DROID keep-ranges window filter, LIBERO suite selection), and are documented separately:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"/NVIDIA/cosmos-framework/blob/main/docs/action_policy_droid_posttrain.md\"\u003eDROID action policy\u003c/a\u003e —\n\u003ccode\u003eexamples/launch_sft_action_policy_droid_nano.sh\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/NVIDIA/cosmos-framework/blob/main/docs/action_policy_libero_posttrain.md\"\u003eLIBERO action policy\u003c/a\u003e —\n\u003ccode\u003eexamples/launch_sft_action_policy_libero_10_nano.sh\u003c/code\u003e / \u003ccode\u003eexamples/launch_sft_action_policy_libero_all_nano.sh\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStep 2 — Prepare checkpoint\u003c/h2\u003e\u003ca id=\"user-content-step-2--prepare-checkpoint\" class=\"anchor\" aria-label=\"Permalink: Step 2 — Prepare checkpoint\" href=\"#step-2--prepare-checkpoint\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eConvert the base checkpoint to \u003ca href=\"https://pytorch.org/docs/stable/distributed.checkpoint.html\" rel=\"nofollow\"\u003ePyTorch Distributed Checkpoint (DCP)\u003c/a\u003e format. \u003ccode\u003ecosmos_framework.scripts.convert_model_to_dcp\u003c/code\u003e ships in the unified \u003ccode\u003ecosmos_framework/\u003c/code\u003e package, so this step runs from the repo root (with the environment activated per \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/docs/setup.md\"\u003eSetup\u003c/a\u003e).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSet \u003ccode\u003eBASE_CHECKPOINT_NAME\u003c/code\u003e to the value from the recipe block you picked in Step 1 (\u003ccode\u003eCosmos3-Nano\u003c/code\u003e, \u003ccode\u003eCosmos3-Super\u003c/code\u003e, or \u003ccode\u003eCosmos3-Edge\u003c/code\u003e):\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"BASE_CHECKPOINT_NAME=Cosmos3-Nano   # or Cosmos3-Super / Cosmos3-Edge — match the recipe in Step 1\n\n# Default output dir matches the launcher (see Step 3 → Option A to override).\npython -m cosmos_framework.scripts.convert_model_to_dcp \\\n  -o examples/checkpoints/$BASE_CHECKPOINT_NAME \\\n  --checkpoint-path $BASE_CHECKPOINT_NAME\"\u003e\u003cpre\u003eBASE_CHECKPOINT_NAME=Cosmos3-Nano   \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e or Cosmos3-Super / Cosmos3-Edge — match the recipe in Step 1\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Default output dir matches the launcher (see Step 3 → Option A to override).\u003c/span\u003e\npython -m cosmos_framework.scripts.convert_model_to_dcp \\\n  -o examples/checkpoints/\u003cspan class=\"pl-smi\"\u003e$BASE_CHECKPOINT_NAME\u003c/span\u003e \\\n  --checkpoint-path \u003cspan class=\"pl-smi\"\u003e$BASE_CHECKPOINT_NAME\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e$BASE_CHECKPOINT_NAME\u003c/code\u003e (e.g. \u003ccode\u003eCosmos3-Nano\u003c/code\u003e, \u003ccode\u003eCosmos3-Super\u003c/code\u003e, \u003ccode\u003eCosmos3-Edge\u003c/code\u003e) is a registered name in the checkpoint catalog; the converter downloads the matching repo from the Hugging Face Hub and writes the DCP into \u003ccode\u003eexamples/checkpoints/$BASE_CHECKPOINT_NAME\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eReasoner Alignment SFT with LLaVA-OneVision (vfm-vlm):\u003c/strong\u003e Skip this step — the Reasoner alignment SFT loads \u003ccode\u003eQwen/Qwen3-VL-8B-Instruct\u003c/code\u003e from the HF Hub at startup (no DCP conversion required). To start from a merged Cosmos3 reasoner snapshot instead, build one with \u003ccode\u003econvert_model_to_vlm_safetensors\u003c/code\u003e (see the VideoPhy-2 note below) and pass it via \u003ccode\u003eVLM_SAFETENSORS_PATH\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Nano):\u003c/strong\u003e Use \u003ccode\u003ecosmos_framework.scripts.convert_model_to_vlm_safetensors\u003c/code\u003e instead.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Step 2 (VLM checkpoint): merge Cosmos3-Nano LM onto the Qwen3-VL visual tower.\n# Replaces the convert_model_to_dcp step used by the VFM recipes above.\npython -m cosmos_framework.scripts.convert_model_to_vlm_safetensors \\\n    --checkpoint-path Cosmos3-Nano \\\n    -o examples/checkpoints/Cosmos3-Nano-VLM\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Step 2 (VLM checkpoint): merge Cosmos3-Nano LM onto the Qwen3-VL visual tower.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Replaces the convert_model_to_dcp step used by the VFM recipes above.\u003c/span\u003e\npython -m cosmos_framework.scripts.convert_model_to_vlm_safetensors \\\n    --checkpoint-path Cosmos3-Nano \\\n    -o examples/checkpoints/Cosmos3-Nano-VLM\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Super):\u003c/strong\u003e Same converter, but merge the \u003ccode\u003eCosmos3-Super\u003c/code\u003e LM onto the \u003cstrong\u003e32B\u003c/strong\u003e Qwen3-VL visual tower via \u003ccode\u003e--vlm-model-name Qwen/Qwen3-VL-32B-Instruct\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Step 2 (Super VLM checkpoint): merge Cosmos3-Super LM onto the Qwen3-VL-32B visual tower.\npython -m cosmos_framework.scripts.convert_model_to_vlm_safetensors \\\n    --checkpoint-path Cosmos3-Super \\\n    --vlm-model-name Qwen/Qwen3-VL-32B-Instruct \\\n    -o examples/checkpoints/Cosmos3-Super-VLM\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Step 2 (Super VLM checkpoint): merge Cosmos3-Super LM onto the Qwen3-VL-32B visual tower.\u003c/span\u003e\npython -m cosmos_framework.scripts.convert_model_to_vlm_safetensors \\\n    --checkpoint-path Cosmos3-Super \\\n    --vlm-model-name Qwen/Qwen3-VL-32B-Instruct \\\n    -o examples/checkpoints/Cosmos3-Super-VLM\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Edge):\u003c/strong\u003e Skip this step — the recipe loads the reasoner weights directly from the (ungated) \u003ccode\u003envidia/Cosmos3-Edge\u003c/code\u003e snapshot at startup: the training loader follows the repo's root safetensors index into its weight shards, so no conversion or extraction is required. To start from a local safetensors directory instead, point \u003ccode\u003eVLM_SAFETENSORS_PATH\u003c/code\u003e at it (optional, same mechanism as the nano recipe).\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStep 3 — Run training\u003c/h2\u003e\u003ca id=\"user-content-step-3--run-training\" class=\"anchor\" aria-label=\"Permalink: Step 3 — Run training\" href=\"#step-3--run-training\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eWeights \u0026amp; Biases (optional):\u003c/strong\u003e training recipes default to \u003ccode\u003ejob.wandb_mode = \"disabled\"\u003c/code\u003e. To log a run to W\u0026amp;B, set \u003ccode\u003ewandb_mode = \"online\"\u003c/code\u003e under \u003ccode\u003e[job]\u003c/code\u003e in the TOML (or pass \u003ccode\u003ejob.wandb_mode=online\u003c/code\u003e as a command-line override) and export \u003ccode\u003eWANDB_API_KEY\u003c/code\u003e in your environment before launching.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOption A (recommended): the paired launch shell\u003c/h3\u003e\u003ca id=\"user-content-option-a-recommended-the-paired-launch-shell\" class=\"anchor\" aria-label=\"Permalink: Option A (recommended): the paired launch shell\" href=\"#option-a-recommended-the-paired-launch-shell\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eEach recipe ships as a \u003ccode\u003eexamples/toml/sft_config/\u0026lt;recipe\u0026gt;.toml\u003c/code\u003e (validated against the pydantic schema at \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/cosmos_framework/configs/toml_config/sft_config.py\"\u003e\u003ccode\u003ecosmos_framework/configs/toml_config/sft_config.py\u003c/code\u003e\u003c/a\u003e) paired with \u003ccode\u003eexamples/launch_sft_\u0026lt;recipe\u0026gt;.sh\u003c/code\u003e; the full catalog is indexed in \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/examples/README.md\"\u003e\u003ccode\u003eexamples/README.md\u003c/code\u003e\u003c/a\u003e. Each \u003ccode\u003e.sh\u003c/code\u003e sources \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/examples/_sft_launcher_common.sh\"\u003e\u003ccode\u003eexamples/_sft_launcher_common.sh\u003c/code\u003e\u003c/a\u003e and forwards into \u003ccode\u003ecosmos_framework.scripts.train --sft-toml=\u0026lt;recipe-toml\u0026gt;\u003c/code\u003e. From the repo root, run the launch shell paired with the recipe you set up in Step 1. The wrapper resolves \u003ccode\u003eDATASET_PATH\u003c/code\u003e, \u003ccode\u003eBASE_CHECKPOINT_PATH\u003c/code\u003e, and \u003ccode\u003eWAN_VAE_PATH\u003c/code\u003e from the default locations under \u003ccode\u003eexamples/\u003c/code\u003e (populated by Step 1 + Step 2), so no env-var setup is required (see \u003ca href=\"#overriding-the-defaults\"\u003ebelow\u003c/a\u003e to override):\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# from the repo root, after Step 1 + Step 2:\nbash examples/launch_sft_vision_nano.sh\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e from the repo root, after Step 1 + Step 2:\u003c/span\u003e\nbash examples/launch_sft_vision_nano.sh\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eEach launcher's default paths come from the \u003ccode\u003eDATASET_PATH\u003c/code\u003e + \u003ccode\u003eBASE_CHECKPOINT_PATH\u003c/code\u003e defaults declared at the top of its \u003ccode\u003e.sh\u003c/code\u003e (each uses \u003ccode\u003e: \"${VAR:=…}\"\u003c/code\u003e so any value you \u003ccode\u003eexport\u003c/code\u003e in the shell before launching wins over the default):\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eLaunch shell\u003c/th\u003e\n\u003cth\u003ePost-Training Task\u003c/th\u003e\n\u003cth\u003eDefault $DATASET_PATH (under examples/data/)\u003c/th\u003e\n\u003cth\u003eDefault $BASE_CHECKPOINT_PATH (under examples/checkpoints/)\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003elaunch_sft_vision_nano.sh\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGenerator SFT\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eBridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eCosmos3-Nano\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003elaunch_sft_vision_super.sh\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGenerator SFT\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eBridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eCosmos3-Super\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003elaunch_sft_vision_edge.sh\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGenerator SFT\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eBridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eCosmos3-Edge\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003elaunch_sft_llava_ov.sh\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eReasoner SFT\u003c/td\u003e\n\u003ctd\u003e(none; dataset streams from HF Hub)\u003c/td\u003e\n\u003ctd\u003e(none; backbone fetched at startup, or set \u003ccode\u003eVLM_SAFETENSORS_PATH\u003c/code\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003elaunch_sft_videophy2_nano.sh\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eReasoner SFT\u003c/td\u003e\n\u003ctd\u003e(none; set \u003ccode\u003eVIDEOPHYSICS_ROOT\u003c/code\u003e env)\u003c/td\u003e\n\u003ctd\u003e(none; set \u003ccode\u003eVLM_SAFETENSORS_PATH\u003c/code\u003e env)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003elaunch_sft_videophy2_super.sh\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eReasoner SFT\u003c/td\u003e\n\u003ctd\u003e(none; set \u003ccode\u003eVIDEOPHYSICS_ROOT\u003c/code\u003e env)\u003c/td\u003e\n\u003ctd\u003e(none; set \u003ccode\u003eVLM_SAFETENSORS_PATH\u003c/code\u003e env — Cosmos3-Super-VLM merge)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003elaunch_sft_videophy2_edge.sh\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eReasoner SFT\u003c/td\u003e\n\u003ctd\u003e(none; set \u003ccode\u003eVIDEOPHYSICS_ROOT\u003c/code\u003e env)\u003c/td\u003e\n\u003ctd\u003e(none; weights load directly from \u003ccode\u003envidia/Cosmos3-Edge\u003c/code\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eWAN_VAE_PATH\u003c/code\u003e defaults to \u003ccode\u003eexamples/checkpoints/wan22_vae/Wan2.2_VAE.pth\u003c/code\u003e for every non-reasoner recipe.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eCosmos3-Edge is only 2B and also fits a 4-GPU node — e.g. \u003ccode\u003eNPROC_PER_NODE=4 bash examples/launch_sft_vision_edge.sh\u003c/code\u003e (tested on 4×GB200).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Nano):\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Step 3 (launch): export both env vars, then launch.\nexport VIDEOPHYSICS_ROOT=$PWD/examples/data/videophysics\nexport VLM_SAFETENSORS_PATH=$PWD/examples/checkpoints/Cosmos3-Nano-VLM\nbash examples/launch_sft_videophy2_nano.sh\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Step 3 (launch): export both env vars, then launch.\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e VIDEOPHYSICS_ROOT=\u003cspan class=\"pl-smi\"\u003e$PWD\u003c/span\u003e/examples/data/videophysics\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e VLM_SAFETENSORS_PATH=\u003cspan class=\"pl-smi\"\u003e$PWD\u003c/span\u003e/examples/checkpoints/Cosmos3-Nano-VLM\nbash examples/launch_sft_videophy2_nano.sh\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Super):\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Same as the nano recipe, but point VLM_SAFETENSORS_PATH at the Cosmos3-Super\n# merge from Step 2. On a 4-GPU node (e.g. GB200x4) also set NPROC_PER_NODE=4.\nexport VIDEOPHYSICS_ROOT=$PWD/examples/data/videophysics\nexport VLM_SAFETENSORS_PATH=$PWD/examples/checkpoints/Cosmos3-Super-VLM\nbash examples/launch_sft_videophy2_super.sh\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Same as the nano recipe, but point VLM_SAFETENSORS_PATH at the Cosmos3-Super\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e merge from Step 2. On a 4-GPU node (e.g. GB200x4) also set NPROC_PER_NODE=4.\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e VIDEOPHYSICS_ROOT=\u003cspan class=\"pl-smi\"\u003e$PWD\u003c/span\u003e/examples/data/videophysics\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e VLM_SAFETENSORS_PATH=\u003cspan class=\"pl-smi\"\u003e$PWD\u003c/span\u003e/examples/checkpoints/Cosmos3-Super-VLM\nbash examples/launch_sft_videophy2_super.sh\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Edge):\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Same as the nano recipe, but no VLM_SAFETENSORS_PATH is needed: the reasoner\n# weights load directly from the (ungated) nvidia/Cosmos3-Edge snapshot.\n# Only 2B — on a 4-GPU node set NPROC_PER_NODE=4.\nexport VIDEOPHYSICS_ROOT=$PWD/examples/data/videophysics\nbash examples/launch_sft_videophy2_edge.sh\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Same as the nano recipe, but no VLM_SAFETENSORS_PATH is needed: the reasoner\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e weights load directly from the (ungated) nvidia/Cosmos3-Edge snapshot.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Only 2B — on a 4-GPU node set NPROC_PER_NODE=4.\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e VIDEOPHYSICS_ROOT=\u003cspan class=\"pl-smi\"\u003e$PWD\u003c/span\u003e/examples/data/videophysics\nbash examples/launch_sft_videophy2_edge.sh\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOverriding the defaults\u003c/h4\u003e\u003ca id=\"user-content-overriding-the-defaults\" class=\"anchor\" aria-label=\"Permalink: Overriding the defaults\" href=\"#overriding-the-defaults\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIf you'd rather put data or checkpoints on a different filesystem (e.g. a faster SSD or shared mount), download to your chosen path in Step 1 / convert the DCP to your chosen path in Step 2, then export the matching env var(s) before launching:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Example: data on /scratch, base DCP on /nfs/ckpts.\nexport DATASET_PATH=/scratch/BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge\nexport BASE_CHECKPOINT_PATH=/nfs/ckpts/Cosmos3-Nano\nexport WAN_VAE_PATH=/nfs/ckpts/wan22_vae/Wan2.2_VAE.pth\nbash examples/launch_sft_vision_nano.sh\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Example: data on /scratch, base DCP on /nfs/ckpts.\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e DATASET_PATH=/scratch/BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e BASE_CHECKPOINT_PATH=/nfs/ckpts/Cosmos3-Nano\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e WAN_VAE_PATH=/nfs/ckpts/wan22_vae/Wan2.2_VAE.pth\nbash examples/launch_sft_vision_nano.sh\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eEach env var falls back to its default if unset, so you only need to export the ones you're moving. The downloads / \u003ccode\u003econvert_model_to_dcp\u003c/code\u003e commands in Step 1 + Step 2 just need their \u003ccode\u003e--local-dir\u003c/code\u003e / \u003ccode\u003e-o\u003c/code\u003e argument pointed at the same path you export here. \u003ccode\u003e.gitignore\u003c/code\u003e excludes \u003ccode\u003eexamples/data/\u003c/code\u003e and \u003ccode\u003eexamples/checkpoints/\u003c/code\u003e so the multi-GB downloads aren't tracked when you keep the defaults.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOption B: raw \u003ccode\u003etorchrun\u003c/code\u003e\u003c/h3\u003e\u003ca id=\"user-content-option-b-raw-torchrun\" class=\"anchor\" aria-label=\"Permalink: Option B: raw torchrun\" href=\"#option-b-raw-torchrun\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIf you'd rather not use the paired launch shell, invoke \u003ccode\u003etorchrun\u003c/code\u003e directly with the recipe's TOML. Unlike Option A, \u003cstrong\u003eraw \u003ccode\u003etorchrun\u003c/code\u003e does not auto-resolve \u003ccode\u003eDATASET_PATH\u003c/code\u003e / \u003ccode\u003eBASE_CHECKPOINT_PATH\u003c/code\u003e / \u003ccode\u003eWAN_VAE_PATH\u003c/code\u003e from \u003ccode\u003eexamples/\u003c/code\u003e\u003c/strong\u003e — they have to come from your shell:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eBASE_CHECKPOINT_PATH\u003c/code\u003e and \u003ccode\u003eWAN_VAE_PATH\u003c/code\u003e are read via \u003ccode\u003e${oc.env:BASE_CHECKPOINT_PATH}\u003c/code\u003e / \u003ccode\u003e${oc.env:WAN_VAE_PATH}\u003c/code\u003e at the TOML's \u003ccode\u003e[checkpoint].load_path\u003c/code\u003e / \u003ccode\u003e[model.tokenizer].vae_path\u003c/code\u003e keys.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDATASET_PATH\u003c/code\u003e is read via \u003ccode\u003e${oc.env:DATASET_PATH}\u003c/code\u003e inside the experiment-SKU Python (e.g. \u003ccode\u003ecosmos_framework/configs/base/experiment/sft/\u0026lt;recipe\u0026gt;.py\u003c/code\u003e), not in the TOML.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eYou have two options to fill them in (pick either, not both):\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003eExport them in the shell before \u003ccode\u003etorchrun\u003c/code\u003e\u003c/strong\u003e (whether they point at the default \u003ccode\u003eexamples/...\u003c/code\u003e paths from Step 1+2 or your own overrides) — shown below.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEdit the TOML by hand\u003c/strong\u003e — open \u003ccode\u003eexamples/toml/sft_config/\u0026lt;recipe\u0026gt;.toml\u003c/code\u003e and replace the \u003ccode\u003e${oc.env:BASE_CHECKPOINT_PATH}\u003c/code\u003e / \u003ccode\u003e${oc.env:WAN_VAE_PATH}\u003c/code\u003e placeholders with literal paths. Useful if you want a self-contained TOML you can hand to a colleague or commit alongside an experiment record. (Hand-editing won't help for \u003ccode\u003eDATASET_PATH\u003c/code\u003e — that's resolved out of the experiment Python, so you must still export it.)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003eRun from the repo root (the directory containing \u003ccode\u003epyproject.toml\u003c/code\u003e and \u003ccode\u003eexamples/\u003c/code\u003e); the snippet uses \u003ccode\u003e$PWD\u003c/code\u003e to absolutize the relative paths.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# This example uses the vision_sft_nano recipe end-to-end (same recipe as\n# Option A). To switch recipes, swap TOML_FILE + DATASET_PATH per the table in\n# Option A, and Cosmos3-Nano → Cosmos3-Super on the LoRA / super recipes.\nTOML_FILE=\u0026quot;examples/toml/sft_config/vision_sft_nano.toml\u0026quot;\n\n# Match the launcher's defaults — or substitute your own paths.\nexport DATASET_PATH=\u0026quot;$PWD/examples/data/BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge\u0026quot;\nexport BASE_CHECKPOINT_PATH=\u0026quot;$PWD/examples/checkpoints/Cosmos3-Nano\u0026quot;\nexport WAN_VAE_PATH=\u0026quot;$PWD/examples/checkpoints/wan22_vae/Wan2.2_VAE.pth\u0026quot;\n\nIMAGINAIRE_OUTPUT_ROOT=outputs/train PYTHONPATH=. \\\ntorchrun --nproc_per_node=8 -m cosmos_framework.scripts.train \\\n    --sft-toml=$TOML_FILE\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e This example uses the vision_sft_nano recipe end-to-end (same recipe as\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Option A). To switch recipes, swap TOML_FILE + DATASET_PATH per the table in\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Option A, and Cosmos3-Nano → Cosmos3-Super on the LoRA / super recipes.\u003c/span\u003e\nTOML_FILE=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eexamples/toml/sft_config/vision_sft_nano.toml\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Match the launcher's defaults — or substitute your own paths.\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e DATASET_PATH=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003e$PWD\u003c/span\u003e/examples/data/BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e BASE_CHECKPOINT_PATH=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003e$PWD\u003c/span\u003e/examples/checkpoints/Cosmos3-Nano\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e WAN_VAE_PATH=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003e$PWD\u003c/span\u003e/examples/checkpoints/wan22_vae/Wan2.2_VAE.pth\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n\nIMAGINAIRE_OUTPUT_ROOT=outputs/train PYTHONPATH=. \\\ntorchrun --nproc_per_node=8 -m cosmos_framework.scripts.train \\\n    --sft-toml=\u003cspan class=\"pl-smi\"\u003e$TOML_FILE\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo resume from the latest in-progress checkpoint, point \u003ccode\u003eBASE_CHECKPOINT_PATH\u003c/code\u003e at the run's \u003ccode\u003echeckpoints/iter_\u0026lt;N\u0026gt;/\u003c/code\u003e directory under \u003ccode\u003e$IMAGINAIRE_OUTPUT_ROOT/\u0026lt;project\u0026gt;/\u0026lt;group\u0026gt;/\u0026lt;name\u0026gt;/\u003c/code\u003e (see \u003ca href=\"#outputs\"\u003eOutputs\u003c/a\u003e below for the full layout).\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOutputs\u003c/h2\u003e\u003ca id=\"user-content-outputs\" class=\"anchor\" aria-label=\"Permalink: Outputs\" href=\"#outputs\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eOutputs land under \u003ccode\u003e$IMAGINAIRE_OUTPUT_ROOT/\u0026lt;project\u0026gt;/\u0026lt;group\u0026gt;/\u0026lt;name\u0026gt;/\u003c/code\u003e:\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003econfig.yaml\u003c/code\u003e, \u003ccode\u003econfig.pkl\u003c/code\u003e: Finalized resolved config (YAML for inspection, pickle for re-instantiation).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elaunch_info.yaml\u003c/code\u003e, \u003ccode\u003ejob_env.yaml\u003c/code\u003e: Job metadata and captured launch environment.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003echeckpoints/\u003c/code\u003e:\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003elatest_checkpoint.txt\u003c/code\u003e: Pointer file containing the latest checkpoint directory name (e.g. \u003ccode\u003eiter_000000200\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eiter_\u0026lt;iter\u0026gt;/\u003c/code\u003e: DCP checkpoint saved every \u003ccode\u003e[train.ckpt].save_freq\u003c/code\u003e iterations (zero-padded 9-digit, e.g. \u003ccode\u003eiter_000000200/\u003c/code\u003e):\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003emodel/\u003c/code\u003e: model weights (sharded \u003ccode\u003e.distcp\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eoptim/\u003c/code\u003e: optimizer state.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003escheduler/\u003c/code\u003e: LR scheduler state.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etrainer/\u003c/code\u003e: training state — includes the \u003ccode\u003eiteration\u003c/code\u003e counter and per-rank \u003ccode\u003erng_state_\u0026lt;i\u0026gt;\u003c/code\u003e (numpy + random + torch + torch_cuda).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edataloader/\u003c/code\u003e: optional per-rank pickle shards (\u003ccode\u003erank_\u0026lt;i\u0026gt;.pkl\u003c/code\u003e) — only present for dataloaders that implement \u003ccode\u003ehas_state()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;callback_name\u0026gt;/\u003c/code\u003e: Callback outputs, one directory per registered callback (e.g. \u003ccode\u003eDeviceMonitor/\u003c/code\u003e, \u003ccode\u003eEveryNDrawSample/\u003c/code\u003e, \u003ccode\u003enorm_monitor/\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewandb/\u003c/code\u003e, \u003ccode\u003ewandb_id.txt\u003c/code\u003e: Wandb run files — only present when \u003ccode\u003e[job].wandb_mode\u003c/code\u003e is \u003ccode\u003eonline\u003c/code\u003e or \u003ccode\u003eoffline\u003c/code\u003e.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003eThe shorthand \u003ccode\u003e$RUN_DIR\u003c/code\u003e used in the rest of this page refers to \u003ccode\u003e$IMAGINAIRE_OUTPUT_ROOT/\u0026lt;project\u0026gt;/\u0026lt;group\u0026gt;/\u0026lt;name\u0026gt;\u003c/code\u003e. For example, with \u003ccode\u003eIMAGINAIRE_OUTPUT_ROOT=outputs/train\u003c/code\u003e and the \u003ccode\u003evision_sft_nano\u003c/code\u003e recipe, \u003ccode\u003e$RUN_DIR\u003c/code\u003e is \u003ccode\u003eoutputs/train/cosmos3/sft/vision_sft_nano\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eHybrid video reasoning SFT\u003c/h2\u003e\u003ca id=\"user-content-hybrid-video-reasoning-sft\" class=\"anchor\" aria-label=\"Permalink: Hybrid video reasoning SFT\" href=\"#hybrid-video-reasoning-sft\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003evideo_reasoning_sft.toml\u003c/code\u003e recipe accepts existing DAFT \u003ccode\u003etao-vl-reason-v1.0\u003c/code\u003e\nannotations directly through Framework's native dataset loader. It also accepts\nthe equivalent \u003ccode\u003ecosmos-video-reasoning-v1.0\u003c/code\u003e records. No dataset conversion or\n\u003ccode\u003envidia-tao-daft\u003c/code\u003e runtime installation is needed. Each JSON object contains an\n\u003ccode\u003eitems\u003c/code\u003e array with \u003ccode\u003equestion\u003c/code\u003e, \u003ccode\u003eanswer\u003c/code\u003e, optional \u003ccode\u003ereasoning\u003c/code\u003e, and \u003ccode\u003evideo_id\u003c/code\u003e fields:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;items\u0026quot;: [\n    {\n      \u0026quot;video_id\u0026quot;: \u0026quot;clip.mp4\u0026quot;,\n      \u0026quot;question\u0026quot;: \u0026quot;Why does the car stop?\u0026quot;,\n      \u0026quot;answer\u0026quot;: \u0026quot;The light is red.\u0026quot;,\n      \u0026quot;reasoning\u0026quot;: \u0026quot;The car approaches a red traffic light.\u0026quot;\n    }\n  ]\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"items\"\u003c/span\u003e: [\n    {\n      \u003cspan class=\"pl-ent\"\u003e\"video_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eclip.mp4\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n      \u003cspan class=\"pl-ent\"\u003e\"question\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eWhy does the car stop?\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n      \u003cspan class=\"pl-ent\"\u003e\"answer\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eThe light is red.\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n      \u003cspan class=\"pl-ent\"\u003e\"reasoning\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eThe car approaches a red traffic light.\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n    }\n  ]\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSet annotation paths independently for training and validation. A single path\nor a JSON array of paths is accepted; multiple files are concatenated in order.\nFor example, with a staged Cosmos3-Nano VLM safetensors checkpoint:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"export VLM_SAFETENSORS_PATH=/checkpoints/cosmos3-nano-vlm\nexport COSMOS_VIDEO_TRAIN_ANNOTATIONS='[\u0026quot;/data/train-bcq.json\u0026quot;, \u0026quot;/data/train-mcq.json\u0026quot;]'\nexport COSMOS_VIDEO_VAL_ANNOTATIONS=/data/val.json\nexport COSMOS_VIDEO_TRAIN_MEDIA_ROOTS=/data/videos\nexport COSMOS_VIDEO_VAL_MEDIA_ROOTS=/data/videos\nexport COSMOS_VIDEO_TRAIN_RESPONSE_MODE=hybrid\nexport COSMOS_VIDEO_VAL_RESPONSE_MODE=answer\n\ntorchrun --nproc-per-node=4 -m cosmos_framework.scripts.train \\\n  --sft-toml=examples/toml/sft_config/video_reasoning_sft.toml \\\n  -- trainer.seed=42\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e VLM_SAFETENSORS_PATH=/checkpoints/cosmos3-nano-vlm\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e COSMOS_VIDEO_TRAIN_ANNOTATIONS=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e[\"/data/train-bcq.json\", \"/data/train-mcq.json\"]\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e COSMOS_VIDEO_VAL_ANNOTATIONS=/data/val.json\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e COSMOS_VIDEO_TRAIN_MEDIA_ROOTS=/data/videos\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e COSMOS_VIDEO_VAL_MEDIA_ROOTS=/data/videos\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e COSMOS_VIDEO_TRAIN_RESPONSE_MODE=hybrid\n\u003cspan class=\"pl-k\"\u003eexport\u003c/span\u003e COSMOS_VIDEO_VAL_RESPONSE_MODE=answer\n\ntorchrun --nproc-per-node=4 -m cosmos_framework.scripts.train \\\n  --sft-toml=examples/toml/sft_config/video_reasoning_sft.toml \\\n  -- trainer.seed=42\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eMedia roots may be a shared path or a JSON array matching the annotation paths.\nWhen omitted, Framework resolves an annotation's \u003ccode\u003emedia_root\u003c/code\u003e relative to its\nJSON directory, or uses that directory if the field is absent. The older\nCosmos-RL DAFT hook uses the annotation directory when no explicit root is given,\nignoring an embedded \u003ccode\u003emedia_root\u003c/code\u003e; supply explicit roots to preserve those paths.\nThese video recipes do not support \u003ccode\u003eimage_id\u003c/code\u003e records.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eEach split accepts these settings (\u003ccode\u003eTRAIN\u003c/code\u003e or \u003ccode\u003eVAL\u003c/code\u003e replaces \u003ccode\u003e{SPLIT}\u003c/code\u003e):\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eEnvironment variable\u003c/th\u003e\n\u003cth\u003eMeaning\u003c/th\u003e\n\u003cth\u003eDefault\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCOSMOS_VIDEO_{SPLIT}_RESPONSE_MODE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eanswer\u003c/code\u003e, \u003ccode\u003ethink\u003c/code\u003e, or \u003ccode\u003ehybrid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ehybrid\u003c/code\u003e for training; \u003ccode\u003eanswer\u003c/code\u003e for validation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCOSMOS_VIDEO_{SPLIT}_SAMPLE_STRIDE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSelect every Nth raw item; positive integer\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e1\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCOSMOS_VIDEO_{SPLIT}_SAMPLE_OFFSET\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStart at this raw index; non-negative integer\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e0\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCOSMOS_VIDEO_{SPLIT}_LIMIT\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMaximum exposed samples after response expansion; positive integer\u003c/td\u003e\n\u003ctd\u003eUnset (unlimited)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCOSMOS_VIDEO_SYSTEM_PROMPT\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOptional system message for both splits\u003c/td\u003e\n\u003ctd\u003eEmpty\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eanswer\u003c/code\u003e targets contain the answer alone. \u003ccode\u003ethink\u003c/code\u003e targets contain\n\u003ccode\u003e\u0026lt;think\u0026gt;\\n{reasoning}\\n\u0026lt;/think\u0026gt;\\n\\n{answer}\u003c/code\u003e, falling back to the answer if\nreasoning is absent or empty. \u003ccode\u003ehybrid\u003c/code\u003e exposes two targets per selected raw item,\ninterleaved as answer, think, answer, think, matching the Cosmos-RL DAFT hook.\nStride and offset apply before expansion; the limit applies afterward and may\nend on an unpaired answer when odd. An offset past the input produces no samples.\nFor example, stride \u003ccode\u003e2\u003c/code\u003e, offset \u003ccode\u003e1\u003c/code\u003e, and limit \u003ccode\u003e3\u003c/code\u003e expose the answer and think\ntargets for raw item \u003ccode\u003e1\u003c/code\u003e, then the answer target for raw item \u003ccode\u003e3\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe reasoning processor applies the Qwen3-VL Instruct chat template to preserve\nexplicit think tags and avoid an injected empty think block. Loss masking trains\nassistant tokens, including supplied reasoning, while ignoring prompt tokens.\nFramework uses its native TorchCodec video processor and lifecycle/checkpoint\ncallbacks; this migration preserves the response/sampling contract, not the\nCosmos-RL decoder implementation. Adjust frame/pixel budgets and the smoke\nrecipe's training schedule for your workload; its fixed optimizer-step budget\ndoes not automatically double in hybrid mode. The Edge experiment is\n\u003ccode\u003ecosmos_task_aware_video_reasoning_edge\u003c/code\u003e and uses the same dataset settings; use\nan Edge checkpoint and its corresponding model and token budgets.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExport checkpoint to Hugging Face safetensors\u003c/h2\u003e\u003ca id=\"user-content-export-checkpoint-to-hugging-face-safetensors\" class=\"anchor\" aria-label=\"Permalink: Export checkpoint to Hugging Face safetensors\" href=\"#export-checkpoint-to-hugging-face-safetensors\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eExport the DCP checkpoint produced in Step 3 to a Hugging Face safetensors checkpoint:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"RUN_DIR=$IMAGINAIRE_OUTPUT_ROOT/\u0026lt;project\u0026gt;/\u0026lt;group\u0026gt;/\u0026lt;name\u0026gt;\n\nCHECKPOINT_ITER=$(cat $RUN_DIR/checkpoints/latest_checkpoint.txt)\nCHECKPOINT_PATH=$RUN_DIR/checkpoints/$CHECKPOINT_ITER\n\npython -m cosmos_framework.scripts.export_model \\\n  --checkpoint-path $CHECKPOINT_PATH \\\n  --config-file $RUN_DIR/config.yaml \\\n  -o $RUN_DIR/model\"\u003e\u003cpre\u003eRUN_DIR=\u003cspan class=\"pl-smi\"\u003e$IMAGINAIRE_OUTPUT_ROOT\u003c/span\u003e/\u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eproject\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e/\u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003egroup\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e/\u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003ename\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\n\nCHECKPOINT_ITER=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e$(\u003c/span\u003ecat \u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/checkpoints/latest_checkpoint.txt\u003cspan class=\"pl-pds\"\u003e)\u003c/span\u003e\u003c/span\u003e\nCHECKPOINT_PATH=\u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/checkpoints/\u003cspan class=\"pl-smi\"\u003e$CHECKPOINT_ITER\u003c/span\u003e\n\npython -m cosmos_framework.scripts.export_model \\\n  --checkpoint-path \u003cspan class=\"pl-smi\"\u003e$CHECKPOINT_PATH\u003c/span\u003e \\\n  --config-file \u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/config.yaml \\\n  -o \u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/model\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe exported safetensors land at \u003ccode\u003e$RUN_DIR/model\u003c/code\u003e and can be used in \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/README.md#inference\"\u003eInference\u003c/a\u003e commands by passing \u003ccode\u003e--checkpoint-path $RUN_DIR/model\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eViT / vision tower (Cosmos3-Edge)\u003c/h3\u003e\u003ca id=\"user-content-vit--vision-tower-cosmos3-edge\" class=\"anchor\" aria-label=\"Permalink: ViT / vision tower (Cosmos3-Edge)\" href=\"#vit--vision-tower-cosmos3-edge\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe plain export above is all any recipe needs — Edge included. For Cosmos3-Edge, \u003ccode\u003eexport_model\u003c/code\u003e bundles the SigLIP2 vision tower into \u003ccode\u003e$RUN_DIR/model/vision_encoder/\u003c/code\u003e and the processor/tokenizer files into the export root, so the exported directory is \u003cstrong\u003eself-contained\u003c/strong\u003e: inference runs from it offline, with no Hub download (see \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/docs/inference.md#reasoner\"\u003eInference → Reasoner\u003c/a\u003e). \u003ccode\u003eexport_manifest.json\u003c/code\u003e records where the tower and processor came from. Nano/Super exports bundle their processor files the same way.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eOptional flags:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# --no-vit: generation-only export (T2V / I2V / V2V / T2I), ~1 GB smaller.\n#     Writes include_visual=false so the checkpoint loads cleanly everywhere.\npython -m cosmos_framework.scripts.export_model \\\n  --checkpoint-path $CHECKPOINT_PATH \\\n  --config-file $RUN_DIR/config.yaml \\\n  --no-vit \\\n  -o $RUN_DIR/model\n\n# --vit-checkpoint-path: use a custom tower from a local directory\n#     (a snapshot root or a vision_encoder/ directory).\npython -m cosmos_framework.scripts.export_model \\\n  --checkpoint-path $CHECKPOINT_PATH \\\n  --config-file $RUN_DIR/config.yaml \\\n  --vit-checkpoint-path /path/to/snapshot \\\n  -o $RUN_DIR/model\n\n# --verify: smoke-test the export on this node's GPU (tiny reasoner query +\n#     tiny generation). A failure exits non-zero but keeps the export.\npython -m cosmos_framework.scripts.export_model \\\n  --checkpoint-path $CHECKPOINT_PATH \\\n  --config-file $RUN_DIR/config.yaml \\\n  --verify \\\n  -o $RUN_DIR/model\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e --no-vit: generation-only export (T2V / I2V / V2V / T2I), ~1 GB smaller.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e     Writes include_visual=false so the checkpoint loads cleanly everywhere.\u003c/span\u003e\npython -m cosmos_framework.scripts.export_model \\\n  --checkpoint-path \u003cspan class=\"pl-smi\"\u003e$CHECKPOINT_PATH\u003c/span\u003e \\\n  --config-file \u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/config.yaml \\\n  --no-vit \\\n  -o \u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/model\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e --vit-checkpoint-path: use a custom tower from a local directory\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e     (a snapshot root or a vision_encoder/ directory).\u003c/span\u003e\npython -m cosmos_framework.scripts.export_model \\\n  --checkpoint-path \u003cspan class=\"pl-smi\"\u003e$CHECKPOINT_PATH\u003c/span\u003e \\\n  --config-file \u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/config.yaml \\\n  --vit-checkpoint-path /path/to/snapshot \\\n  -o \u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/model\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e --verify: smoke-test the export on this node's GPU (tiny reasoner query +\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e     tiny generation). A failure exits non-zero but keeps the export.\u003c/span\u003e\npython -m cosmos_framework.scripts.export_model \\\n  --checkpoint-path \u003cspan class=\"pl-smi\"\u003e$CHECKPOINT_PATH\u003c/span\u003e \\\n  --config-file \u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/config.yaml \\\n  --verify \\\n  -o \u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/model\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConvert to Diffusers\u003c/h2\u003e\u003ca id=\"user-content-convert-to-diffusers\" class=\"anchor\" aria-label=\"Permalink: Convert to Diffusers\" href=\"#convert-to-diffusers\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eConvert the Hugging Face export from the previous step into a Diffusers pipeline (\u003ccode\u003etransformer/\u003c/code\u003e, \u003ccode\u003evae/\u003c/code\u003e, \u003ccode\u003escheduler/\u003c/code\u003e, \u003ccode\u003etext_tokenizer/\u003c/code\u003e, \u003ccode\u003emodel_index.json\u003c/code\u003e, …):\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"python -m cosmos_framework.scripts.convert_model_to_diffusers \\\n  --checkpoint-path $RUN_DIR/model \\\n  -o $RUN_DIR/diffusers\"\u003e\u003cpre\u003epython -m cosmos_framework.scripts.convert_model_to_diffusers \\\n  --checkpoint-path \u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/model \\\n  -o \u003cspan class=\"pl-smi\"\u003e$RUN_DIR\u003c/span\u003e/diffusers\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe input is the Hugging Face safetensors directory produced by \u003ccode\u003eexport_model\u003c/code\u003e above — not a raw DCP checkpoint, so run the export first. The result at \u003ccode\u003e$RUN_DIR/diffusers\u003c/code\u003e can be loaded with \u003ccode\u003ediffusers\u003c/code\u003e or passed to \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/README.md#inference\"\u003eInference\u003c/a\u003e via \u003ccode\u003e--checkpoint-path $RUN_DIR/diffusers\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eA generation-only checkpoint with no reasoner vision tower (\u003ccode\u003einclude_visual\u003c/code\u003e unset) is converted without a \u003ccode\u003evision_encoder/\u003c/code\u003e sidecar automatically; pass \u003ccode\u003e--skip-vision-encoder\u003c/code\u003e to force-skip it even when a tower is present.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfig\u003c/h2\u003e\u003ca id=\"user-content-config\" class=\"anchor\" aria-label=\"Permalink: Config\" href=\"#config\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe recipe TOML is parsed against the pydantic schema \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/cosmos_framework/configs/toml_config/sft_config.py\"\u003e\u003ccode\u003eSFTExperimentConfig\u003c/code\u003e\u003c/a\u003e at load time. Every top-level key listed below maps to a sub-model in that file; unknown keys raise a \u003ccode\u003eValidationError\u003c/code\u003e before training starts (\u003ccode\u003eextra=\"forbid\"\u003c/code\u003e on every sub-model). Values may use OmegaConf env interpolation \u003ccode\u003e${oc.env:NAME}\u003c/code\u003e — the recipe TOMLs use this for \u003ccode\u003eBASE_CHECKPOINT_PATH\u003c/code\u003e (\u003ccode\u003e[checkpoint].load_path\u003c/code\u003e) and \u003ccode\u003eWAN_VAE_PATH\u003c/code\u003e (\u003ccode\u003e[model.tokenizer].vae_path\u003c/code\u003e). \u003ccode\u003eDATASET_PATH\u003c/code\u003e is consumed the same way but inside the experiment-SKU Python (\u003ccode\u003ecosmos_framework/configs/base/experiment/sft/\u0026lt;recipe\u0026gt;.py\u003c/code\u003e), not in the TOML.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eFor the full field-by-field reference (every section, every default, every VFM/VLM applicability note, the \u003ccode\u003e\"???\"\u003c/code\u003e MISSING sentinel, env interpolation, the VFM↔VLM path-remap table, and how to extend the schema), see \u003ca href=\"/NVIDIA/cosmos-framework/blob/main/docs/sft_config.md\"\u003eSFT Structured-TOML Config Reference\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe commonly tuned knobs:\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003e[job]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003etask\u003c/code\u003e — \u003ccode\u003e\"vfm\"\u003c/code\u003e (generator recipes) or \u003ccode\u003e\"vlm\"\u003c/code\u003e (Reasoner alignment). Picks the base config: \u003ccode\u003ecosmos_framework/configs/base/config.py\u003c/code\u003e vs \u003ccode\u003e…/vlm/config.py\u003c/code\u003e. Also drives \u003ccode\u003ePATH_REMAPS\u003c/code\u003e in \u003ccode\u003etoml_config_helper.py\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eexperiment\u003c/code\u003e — Registered experiment SKU name (e.g. \u003ccode\u003evision_sft_nano\u003c/code\u003e). Each SKU is a Python file under \u003ccode\u003ecosmos_framework/configs/base/experiment/sft/\u003c/code\u003e that wires up dataloader, model variant, and recipe-specific defaults.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eproject\u003c/code\u003e, \u003ccode\u003egroup\u003c/code\u003e, \u003ccode\u003ename\u003c/code\u003e — Components of the run output dir \u003ccode\u003e$IMAGINAIRE_OUTPUT_ROOT/\u0026lt;project\u0026gt;/\u0026lt;group\u0026gt;/\u0026lt;name\u0026gt;/\u003c/code\u003e. Also flow to W\u0026amp;B as the project / group / run name.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewandb_mode\u003c/code\u003e — \u003ccode\u003e\"online\"\u003c/code\u003e (logs to W\u0026amp;B; \u003ccode\u003eWANDB_API_KEY\u003c/code\u003e must be set), \u003ccode\u003e\"offline\"\u003c/code\u003e (logs locally, sync later with \u003ccode\u003ewandb sync\u003c/code\u003e), or \u003ccode\u003e\"disabled\"\u003c/code\u003e.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[model]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003emax_num_tokens_after_packing\u003c/code\u003e — VFM token-packing target. \u003ccode\u003e-1\u003c/code\u003e disables the cap. VFM only; VLM uses \u003ccode\u003edata_setting.max_tokens\u003c/code\u003e (tail override).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejoint_attn_implementation\u003c/code\u003e — VFM attention layout: \u003ccode\u003e\"two_way\"\u003c/code\u003e / \u003ccode\u003e\"three_way\"\u003c/code\u003e (NATTEN) / \u003ccode\u003e\"flex\"\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eattn_implementation\u003c/code\u003e — VLM attention impl: \u003ccode\u003e\"cosmos\"\u003c/code\u003e / \u003ccode\u003e\"flash_attention_2\"\u003c/code\u003e / \u003ccode\u003e\"sdpa\"\u003c/code\u003e / \u003ccode\u003e\"eager\"\u003c/code\u003e. VLM only.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elora_enabled\u003c/code\u003e, \u003ccode\u003elora_rank\u003c/code\u003e, \u003ccode\u003elora_alpha\u003c/code\u003e, \u003ccode\u003elora_target_modules\u003c/code\u003e — LoRA adapter knobs for the generation pathway. Used by SUPER-tier recipes; NANO-tier leaves \u003ccode\u003elora_enabled=false\u003c/code\u003e. VFM only.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[model.ema]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eenabled\u003c/code\u003e, \u003ccode\u003erate\u003c/code\u003e, \u003ccode\u003eiteration_shift\u003c/code\u003e — Exponential moving average of generation-pathway weights. Full fine-tunes typically enable it; LoRA recipes leave it off.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[model.parallelism]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003edata_parallel_shard_degree\u003c/code\u003e — FSDP shard degree. \u003ccode\u003edata_parallel_shard_degree × data_parallel_replicate_degree × context_parallel_shard_degree\u003c/code\u003e must equal \u003ccode\u003eWORLD_SIZE\u003c/code\u003e. \u003ccode\u003e-1\u003c/code\u003e autoselects from torchrun world size.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edata_parallel_replicate_degree\u003c/code\u003e — HSDP replicate degree (outer replicate loop over the shard topology).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econtext_parallel_shard_degree\u003c/code\u003e — Context-parallel shard degree. \u003ccode\u003e\u0026gt;1\u003c/code\u003e splits the sequence dim across ranks (used by super-tier configs: DP=4, CP=2 → 8 GPUs).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecfg_parallel_shard_degree\u003c/code\u003e — Classifier-free-guidance shard degree. Almost always \u003ccode\u003e1\u003c/code\u003e for SFT.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efsdp_master_dtype\u003c/code\u003e — Master parameter / FSDP reduce dtype: typically \u003ccode\u003e\"float32\"\u003c/code\u003e.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[model.compile]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eenabled\u003c/code\u003e — Enable \u003ccode\u003etorch.compile\u003c/code\u003e. Improves speed at the cost of memory.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecompile_dynamic\u003c/code\u003e — Whether to compile with symbolic-shape (dynamic) kernels. \u003ccode\u003eTrue\u003c/code\u003e (default) is appropriate for training; AR inference may prefer \u003ccode\u003eFalse\u003c/code\u003e for stable shapes.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[model]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eprecision\u003c/code\u003e — Compute dtype for forward/backward: \u003ccode\u003e\"bfloat16\"\u003c/code\u003e / \u003ccode\u003e\"float16\"\u003c/code\u003e / \u003ccode\u003e\"float32\"\u003c/code\u003e. Master weights stay fp32 separately.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[model.activation_checkpointing]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003emode\u003c/code\u003e — \u003ccode\u003e\"none\"\u003c/code\u003e / \u003ccode\u003e\"selective\"\u003c/code\u003e (per-op SAC, MoT-only) / \u003ccode\u003e\"full\"\u003c/code\u003e (per-block checkpointing).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esave_ops_regex\u003c/code\u003e — Regex patterns for ops to keep saved under \u003ccode\u003emode=\"selective\"\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003epreserve_rng_state\u003c/code\u003e, \u003ccode\u003edeterminism_check\u003c/code\u003e — Recompute determinism plumbing.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[model.tokenizer]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003evae_path\u003c/code\u003e — Wan2.2 VAE \u003ccode\u003e.pth\u003c/code\u003e path. Recipe TOMLs use \u003ccode\u003e\"${oc.env:WAN_VAE_PATH}\"\u003c/code\u003e. VFM only.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[optimizer]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003elr\u003c/code\u003e — Base learning rate.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ebetas\u003c/code\u003e, \u003ccode\u003eeps\u003c/code\u003e, \u003ccode\u003efused\u003c/code\u003e, \u003ccode\u003eweight_decay\u003c/code\u003e — Standard AdamW knobs. \u003ccode\u003eeps\u003c/code\u003e is VFM-only.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ekeys_to_select\u003c/code\u003e — Substring allowlist for trainable params. Empty list = train everything; \u003ccode\u003e[\"lora_\"]\u003c/code\u003e = adapter-only fine-tune.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[optimizer.lr_multipliers]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003eInline table of \u003ccode\u003e\u0026lt;substring\u0026gt; = \u0026lt;multiplier\u0026gt;\u003c/code\u003e pairs that scale the LR of params whose name contains the substring. The shipped vision recipes leave this empty (Hydra default \u003ccode\u003e{}\u003c/code\u003e stands).\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[scheduler]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003ecycle_lengths\u003c/code\u003e, \u003ccode\u003ewarm_up_steps\u003c/code\u003e — Cycle length and warmup duration (lists, one entry per cycle), in optimizer steps.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ef_max\u003c/code\u003e, \u003ccode\u003ef_min\u003c/code\u003e, \u003ccode\u003ef_start\u003c/code\u003e — LR multipliers at peak / trough / step-0 (ratios of \u003ccode\u003eoptimizer.lr\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003everbosity_interval\u003c/code\u003e — Scheduler-side LR log frequency. VFM only.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[trainer]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003emax_iter\u003c/code\u003e — Total optimizer steps.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egrad_accum_iter\u003c/code\u003e — Micro-batches per optimizer step. Effective global batch = \u003ccode\u003egrad_accum_iter × per-rank batch × world_size\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elogging_iter\u003c/code\u003e — Console / W\u0026amp;B scalar log frequency.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edistributed_parallelism\u003c/code\u003e — \u003ccode\u003e\"fsdp\"\u003c/code\u003e is the only supported value.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[trainer.callbacks.compile_tokenizer]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eenabled\u003c/code\u003e, \u003ccode\u003ecompile_after_iterations\u003c/code\u003e, \u003ccode\u003ewarmup_resolutions\u003c/code\u003e — Lazy \u003ccode\u003etorch.compile\u003c/code\u003e of the VAE tokenizer. VFM only.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[trainer.callbacks.grad_clip]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eclip_norm\u003c/code\u003e — Max global L2 norm of the gradient (steps with larger norm are rescaled).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eforce_finite\u003c/code\u003e — Replace NaN/Inf grads with zero (default \u003ccode\u003etrue\u003c/code\u003e on VFM, \u003ccode\u003efalse\u003c/code\u003e on VLM).\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[checkpoint]\u003c/code\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eload_path\u003c/code\u003e — Base DCP checkpoint directory to resume from (Step 2 output, or a prior run's \u003ccode\u003echeckpoints/iter_\u0026lt;N\u0026gt;/\u003c/code\u003e). Recipe TOMLs use \u003ccode\u003e\"${oc.env:BASE_CHECKPOINT_PATH}\"\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esave_iter\u003c/code\u003e — Save a new DCP checkpoint every N optimizer steps.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ekeys_to_skip_loading\u003c/code\u003e — Substring blocklist applied at load time. Used to mask EMA / LoRA tensors when warm-starting from a checkpoint that doesn't have them yet.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[dataloader_train]\u003c/code\u003e — Top-level scalars only; the dataloader's class (LazyCall) and pipeline wiring (datasets, packers, …) stay in the experiment Python.\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003emax_samples_per_batch\u003c/code\u003e — Per-micro-batch sample cap (remapped to \u003ccode\u003emax_batch_size\u003c/code\u003e on the VLM packer). \u003ccode\u003enull\u003c/code\u003e / omitted = no per-count cap.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emax_sequence_length\u003c/code\u003e — Per-packed-sequence token cap (remapped to \u003ccode\u003emax_tokens\u003c/code\u003e on the VLM packer).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eseed\u003c/code\u003e — Dataloader RNG seed (VFM only).\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCommon Hydra tail overrides\u003c/h3\u003e\u003ca id=\"user-content-common-hydra-tail-overrides\" class=\"anchor\" aria-label=\"Permalink: Common Hydra tail overrides\" href=\"#common-hydra-tail-overrides\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThese knobs aren't part of the pydantic schema today; pass them as trailing \u003ccode\u003ekey.path=value\u003c/code\u003e positionals after \u003ccode\u003e--\u003c/code\u003e (the \u003ccode\u003ecosmos_framework.scripts.train\u003c/code\u003e flow forwards them through OmegaConf):\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003emodel.config.policy.backbone.model_name\u003c/code\u003e — VLM backbone HF identifier (e.g. \u003ccode\u003eQwen/Qwen3-VL-8B-Instruct\u003c/code\u003e). Used by \u003ccode\u003elaunch_sft_llava_ov.sh\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edata_setting.max_tokens\u003c/code\u003e — VLM token-packing cap (the VLM analogue of \u003ccode\u003e[model].max_num_tokens_after_packing\u003c/code\u003e). Used by \u003ccode\u003elaunch_sft_llava_ov.sh\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eThe launchers wire these via \u003ccode\u003eTAIL_OVERRIDES=(…)\u003c/code\u003e; the helper appends \u003ccode\u003e-- \"${TAIL_OVERRIDES[@]}\"\u003c/code\u003e after the \u003ccode\u003e--sft-toml=\u003c/code\u003e argument.\u003c/p\u003e\n\u003c/article\u003e","richTextTruncated":false,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"Post-Training (Supervised Fine-Tuning)","fully_qualified_name":"Post-Training (Supervised Fine-Tuning)","kind":"section_1","ident_start":2,"ident_end":40,"extent_start":0,"extent_end":37696,"ident_utf16":{"start":{"line_number":0,"utf16_col":2},"end":{"line_number":0,"utf16_col":40}},"extent_utf16":{"start":{"line_number":0,"utf16_col":0},"end":{"line_number":560,"utf16_col":0}}},{"name":"Step 1 - Prepare data and config","fully_qualified_name":"Step 1 - Prepare data and config","kind":"section_2","ident_start":1455,"ident_end":1487,"extent_start":1452,"extent_end":10528,"ident_utf16":{"start":{"line_number":36,"utf16_col":3},"end":{"line_number":36,"utf16_col":35}},"extent_utf16":{"start":{"line_number":36,"utf16_col":0},"end":{"line_number":182,"utf16_col":0}}},{"name":"Step 2 — Prepare checkpoint","fully_qualified_name":"Step 2 — Prepare checkpoint","kind":"section_2","ident_start":10531,"ident_end":10560,"extent_start":10528,"extent_end":13438,"ident_utf16":{"start":{"line_number":182,"utf16_col":3},"end":{"line_number":182,"utf16_col":30}},"extent_utf16":{"start":{"line_number":182,"utf16_col":0},"end":{"line_number":223,"utf16_col":0}}},{"name":"Step 3 — Run training","fully_qualified_name":"Step 3 — Run training","kind":"section_2","ident_start":13441,"ident_end":13464,"extent_start":13438,"extent_end":21413,"ident_utf16":{"start":{"line_number":223,"utf16_col":3},"end":{"line_number":223,"utf16_col":24}},"extent_utf16":{"start":{"line_number":223,"utf16_col":0},"end":{"line_number":327,"utf16_col":0}}},{"name":"Option A (recommended): the paired launch shell","fully_qualified_name":"Option A (recommended): the paired launch shell","kind":"section_3","ident_start":13764,"ident_end":13811,"extent_start":13760,"extent_end":18967,"ident_utf16":{"start":{"line_number":227,"utf16_col":4},"end":{"line_number":227,"utf16_col":51}},"extent_utf16":{"start":{"line_number":227,"utf16_col":0},"end":{"line_number":295,"utf16_col":0}}},{"name":"Overriding the defaults","fully_qualified_name":"Overriding the defaults","kind":"section_4","ident_start":18003,"ident_end":18026,"extent_start":17998,"extent_end":18967,"ident_utf16":{"start":{"line_number":281,"utf16_col":5},"end":{"line_number":281,"utf16_col":28}},"extent_utf16":{"start":{"line_number":281,"utf16_col":0},"end":{"line_number":295,"utf16_col":0}}},{"name":"Option B: raw `torchrun`","fully_qualified_name":"Option B: raw `torchrun`","kind":"section_3","ident_start":18971,"ident_end":18995,"extent_start":18967,"extent_end":21413,"ident_utf16":{"start":{"line_number":295,"utf16_col":4},"end":{"line_number":295,"utf16_col":28}},"extent_utf16":{"start":{"line_number":295,"utf16_col":0},"end":{"line_number":327,"utf16_col":0}}},{"name":"Outputs","fully_qualified_name":"Outputs","kind":"section_2","ident_start":21416,"ident_end":21423,"extent_start":21413,"extent_end":22906,"ident_utf16":{"start":{"line_number":327,"utf16_col":3},"end":{"line_number":327,"utf16_col":10}},"extent_utf16":{"start":{"line_number":327,"utf16_col":0},"end":{"line_number":346,"utf16_col":0}}},{"name":"Hybrid video reasoning SFT","fully_qualified_name":"Hybrid video reasoning SFT","kind":"section_2","ident_start":22909,"ident_end":22935,"extent_start":22906,"extent_end":27356,"ident_utf16":{"start":{"line_number":346,"utf16_col":3},"end":{"line_number":346,"utf16_col":29}},"extent_utf16":{"start":{"line_number":346,"utf16_col":0},"end":{"line_number":422,"utf16_col":0}}},{"name":"Export checkpoint to Hugging Face safetensors","fully_qualified_name":"Export checkpoint to Hugging Face safetensors","kind":"section_2","ident_start":27359,"ident_end":27404,"extent_start":27356,"extent_end":29526,"ident_utf16":{"start":{"line_number":422,"utf16_col":3},"end":{"line_number":422,"utf16_col":48}},"extent_utf16":{"start":{"line_number":422,"utf16_col":0},"end":{"line_number":472,"utf16_col":0}}},{"name":"ViT / vision tower (Cosmos3-Edge)","fully_qualified_name":"ViT / vision tower (Cosmos3-Edge)","kind":"section_3","ident_start":28001,"ident_end":28034,"extent_start":27997,"extent_end":29526,"ident_utf16":{"start":{"line_number":440,"utf16_col":4},"end":{"line_number":440,"utf16_col":37}},"extent_utf16":{"start":{"line_number":440,"utf16_col":0},"end":{"line_number":472,"utf16_col":0}}},{"name":"Convert to Diffusers","fully_qualified_name":"Convert to Diffusers","kind":"section_2","ident_start":29529,"ident_end":29549,"extent_start":29526,"extent_end":30381,"ident_utf16":{"start":{"line_number":472,"utf16_col":3},"end":{"line_number":472,"utf16_col":23}},"extent_utf16":{"start":{"line_number":472,"utf16_col":0},"end":{"line_number":486,"utf16_col":0}}},{"name":"Config","fully_qualified_name":"Config","kind":"section_2","ident_start":30384,"ident_end":30390,"extent_start":30381,"extent_end":37696,"ident_utf16":{"start":{"line_number":486,"utf16_col":3},"end":{"line_number":486,"utf16_col":9}},"extent_utf16":{"start":{"line_number":486,"utf16_col":0},"end":{"line_number":560,"utf16_col":0}}},{"name":"Common Hydra tail overrides","fully_qualified_name":"Common Hydra tail overrides","kind":"section_3","ident_start":37043,"ident_end":37070,"extent_start":37039,"extent_end":37696,"ident_utf16":{"start":{"line_number":552,"utf16_col":4},"end":{"line_number":552,"utf16_col":31}},"extent_utf16":{"start":{"line_number":552,"utf16_col":0},"end":{"line_number":560,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":1243757086,"defaultBranch":"main","name":"cosmos-framework","ownerLogin":"NVIDIA","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2026-05-19T16:27:26.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1728152?v=4","public":true,"private":false,"isOrgOwned":true,"isArchived":false},"currentUser":null,"uploadToken":"Ld5IWsBwbkvQJ4KqqQmxk0N9vCNEYWaHl1qQ837SJ7xYCwEySJ8sk5lwC6nKK-shIlWj0XrnbHe5agfTqQRFnw","allShortcutsEnabled":false,"treeExpanded":true,"path":"docs/training.md","symbolsExpanded":false,"refInfo":{"name":"main","listCacheKey":"v0:1792737840.0","canEdit":false,"currentOid":"9214f43fadef00919c07853c8fa1c2e7d75444e1"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"docs":{"items":[{"name":"deploy","path":"docs/deploy","contentType":"directory"},{"name":"get_started","path":"docs/get_started","contentType":"directory"},{"name":"models","path":"docs/models","contentType":"directory"},{"name":"post_training","path":"docs/post_training","contentType":"directory"},{"name":"posttrain","path":"docs/posttrain","contentType":"directory"},{"name":".gitkeep","path":"docs/.gitkeep","contentType":"file"},{"name":"README.md","path":"docs/README.md","contentType":"file"},{"name":"action_fd_droid_posttrain.md","path":"docs/action_fd_droid_posttrain.md","contentType":"file"},{"name":"action_policy_droid_posttrain.md","path":"docs/action_policy_droid_posttrain.md","contentType":"file"},{"name":"action_policy_droid_server.md","path":"docs/action_policy_droid_server.md","contentType":"file"},{"name":"action_policy_libero_posttrain.md","path":"docs/action_policy_libero_posttrain.md","contentType":"file"},{"name":"automl-algorithms.md","path":"docs/automl-algorithms.md","contentType":"file"},{"name":"automl-platforms.md","path":"docs/automl-platforms.md","contentType":"file"},{"name":"automl-prompts.md","path":"docs/automl-prompts.md","contentType":"file"},{"name":"automl-slurm.md","path":"docs/automl-slurm.md","contentType":"file"},{"name":"automl.md","path":"docs/automl.md","contentType":"file"},{"name":"bimanual_data_preflight.md","path":"docs/bimanual_data_preflight.md","contentType":"file"},{"name":"bimanual_sessions.md","path":"docs/bimanual_sessions.md","contentType":"file"},{"name":"code_structure.md","path":"docs/code_structure.md","contentType":"file"},{"name":"custom_dataset.md","path":"docs/custom_dataset.md","contentType":"file"},{"name":"dataset_jsonl.md","path":"docs/dataset_jsonl.md","contentType":"file"},{"name":"environment_variables.md","path":"docs/environment_variables.md","contentType":"file"},{"name":"evaluation.md","path":"docs/evaluation.md","contentType":"file"},{"name":"faq.md","path":"docs/faq.md","contentType":"file"},{"name":"inference.md","path":"docs/inference.md","contentType":"file"},{"name":"inference_auto.md","path":"docs/inference_auto.md","contentType":"file"},{"name":"inference_bimanual.md","path":"docs/inference_bimanual.md","contentType":"file"},{"name":"inference_sim_auto.md","path":"docs/inference_sim_auto.md","contentType":"file"},{"name":"inference_transfer.md","path":"docs/inference_transfer.md","contentType":"file"},{"name":"prompt_upsampling.md","path":"docs/prompt_upsampling.md","contentType":"file"},{"name":"setup.md","path":"docs/setup.md","contentType":"file"},{"name":"sft_config.md","path":"docs/sft_config.md","contentType":"file"},{"name":"training.md","path":"docs/training.md","contentType":"file"},{"name":"training_sim_auto.md","path":"docs/training_sim_auto.md","contentType":"file"},{"name":"training_sim_transfer_stage0.md","path":"docs/training_sim_transfer_stage0.md","contentType":"file"},{"name":"training_transfer_auto.md","path":"docs/training_transfer_auto.md","contentType":"file"},{"name":"transfer_numerical_preservation.md","path":"docs/transfer_numerical_preservation.md","contentType":"file"}],"totalCount":37},"":{"items":[{"name":".agents","path":".agents","contentType":"directory"},{"name":".claude","path":".claude","contentType":"directory"},{"name":".config","path":".config","contentType":"directory"},{"name":".github","path":".github","contentType":"directory"},{"name":"ci","path":"ci","contentType":"directory"},{"name":"cosmos_framework","path":"cosmos_framework","contentType":"directory"},{"name":"docker","path":"docker","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"examples","path":"examples","contentType":"directory"},{"name":"inputs","path":"inputs","contentType":"directory"},{"name":"packages","path":"packages","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":"tools","path":"tools","contentType":"directory"},{"name":".coveragerc","path":".coveragerc","contentType":"file"},{"name":".dockerignore","path":".dockerignore","contentType":"file"},{"name":".file_mapping.json","path":".file_mapping.json","contentType":"file"},{"name":".gitattributes","path":".gitattributes","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".gitleaks.toml","path":".gitleaks.toml","contentType":"file"},{"name":".posttrain_file_mapping.json","path":".posttrain_file_mapping.json","contentType":"file"},{"name":".pre-commit-config.yaml","path":".pre-commit-config.yaml","contentType":"file"},{"name":".pytest.toml","path":".pytest.toml","contentType":"file"},{"name":".python-version","path":".python-version","contentType":"file"},{"name":".ruff.toml","path":".ruff.toml","contentType":"file"},{"name":"AGENTS.md","path":"AGENTS.md","contentType":"file"},{"name":"ATTRIBUTIONS.md","path":"ATTRIBUTIONS.md","contentType":"file"},{"name":"CHANGELOG.md","path":"CHANGELOG.md","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"Dockerfile","path":"Dockerfile","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"NOTICE","path":"NOTICE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"RELEASE.md","path":"RELEASE.md","contentType":"file"},{"name":"SECURITY.md","path":"SECURITY.md","contentType":"file"},{"name":"conftest.py","path":"conftest.py","contentType":"file"},{"name":"justfile","path":"justfile","contentType":"file"},{"name":"pyproject.toml","path":"pyproject.toml","contentType":"file"},{"name":"pyrefly.toml","path":"pyrefly.toml","contentType":"file"},{"name":"sitecustomize.py","path":"sitecustomize.py","contentType":"file"},{"name":"uv.lock","path":"uv.lock","contentType":"file"}],"totalCount":40}},"fileTreeProcessingTime":13.633998,"foldersToFetch":[],"refName":"main"},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"main","listCacheKey":"v0:1792737840.0","canEdit":false,"refType":"branch","currentOid":"9214f43fadef00919c07853c8fa1c2e7d75444e1","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"docs/training.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/NVIDIA/cosmos-framework/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"training.md","displayUrl":"https://github.com/NVIDIA/cosmos-framework/blob/main/docs/training.md?raw=true","headerInfo":{"blobSize":"36.8 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"596ba57","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FNVIDIA%2Fcosmos-framework%2Fblob%2Fmain%2Fdocs%2Ftraining.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"560","truncatedSloc":"422"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/NVIDIA/cosmos-framework/blob/main/docs/training.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/NVIDIA/cosmos-framework/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/NVIDIA/cosmos-framework/raw/refs/heads/main/docs/training.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["# Post-Training (Supervised Fine-Tuning)","","\u003c!--TOC--\u003e","","______________________________________________________________________","","**Table of Contents**","","- [Step 1 - Prepare data and config](#step-1---prepare-data-and-config)","- [Step 2 — Prepare checkpoint](#step-2--prepare-checkpoint)","- [Step 3 — Run training](#step-3--run-training)","  - [Option A (recommended): the paired launch shell](#option-a-recommended-the-paired-launch-shell)","    - [Overriding the defaults](#overriding-the-defaults)","  - [Option B: raw `torchrun`](#option-b-raw-torchrun)","- [Outputs](#outputs)","- [Hybrid video reasoning SFT](#hybrid-video-reasoning-sft)","- [Export checkpoint to Hugging Face safetensors](#export-checkpoint-to-hugging-face-safetensors)","  - [ViT / vision tower (Cosmos3-Edge)](#vit--vision-tower-cosmos3-edge)","- [Convert to Diffusers](#convert-to-diffusers)","- [Config](#config)","  - [Common Hydra tail overrides](#common-hydra-tail-overrides)","","______________________________________________________________________","","\u003c!--TOC--\u003e","","Fine-tune a pre-trained Cosmos3 model on your own dataset using supervised fine-tuning (SFT). Tested on 8× H100 (80 GB).","","Prerequisites:","","- [Setup](../README.md#setup)","- [Environment Variables](./environment_variables.md)","- [FAQ](./faq.md) — troubleshooting (OOM during SFT, defaults), common pitfalls.","","The runnable artifacts (TOML recipes, paired launch shells, inference helpers) live in [`examples/`](../examples/README.md).","","## Step 1 - Prepare data and config","","Some datasets are license gated — visit the repository page and accept any terms, and authenticate with `uvx hf@latest auth login` (or set `HF_TOKEN`).","","The per-recipe download commands below write to `examples/data/\u003cdataset\u003e/` and `examples/checkpoints/wan22_vae/Wan2.2_VAE.pth`, which match the launcher's default `$DATASET_PATH` and `$WAN_VAE_PATH`. See [Step 3 → Option A](#option-a-recommended-the-paired-launch-shell) for how to override these defaults if you'd rather keep data on a different filesystem.","","Select one of the following recipes:","","\u003cdetails open\u003e\u003csummary\u003e\u003cb\u003eVision SFT (Cosmos3-Nano)\u003c/b\u003e\u003c/summary\u003e","","T2V/I2V/V2V SFT on [nvidia/BridgeData2-Subset-Synthetic-Captions](https://huggingface.co/datasets/nvidia/BridgeData2-Subset-Synthetic-Captions/tree/main). `$DATASET_PATH` should be the directory containing `train/video_dataset_file.jsonl`. Each clip carries a structured-JSON caption (`caption_json`) — the model's native prompt format — which the SFT loader trains on by default (the dense narrative is kept as a backup), so training stays aligned with [Inference](./dataset_jsonl.md#inference); see [JSONL Dataset → Format](./dataset_jsonl.md#format).","","Launch shell: `examples/launch_sft_vision_nano.sh`","","```shell","BASE_CHECKPOINT_NAME=Cosmos3-Nano","","# Defaults match the launcher (see Step 3 → Option A to override).","uvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \\","    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \\","    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet","uvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \\","    --local-dir examples/checkpoints/wan22_vae --quiet","```","","\u003c/details\u003e","","\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eVision SFT LoRA (Cosmos3-Super)\u003c/b\u003e\u003c/summary\u003e","","LoRA SFT on Qwen3-VL-32B MoT (Cosmos3-Super), on the same Bridge dataset as **Vision SFT (Cosmos3-Nano)**. Step 2 must convert the Cosmos3-Super checkpoint, not Cosmos3-Nano.","","Launch shell: `examples/launch_sft_vision_super.sh`","","```shell","BASE_CHECKPOINT_NAME=Cosmos3-Super","","# Defaults match the launcher (see Step 3 → Option A to override).","uvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \\","    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \\","    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet","uvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \\","    --local-dir examples/checkpoints/wan22_vae --quiet","```","","\u003c/details\u003e","","\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eVision SFT (Cosmos3-Edge)\u003c/b\u003e\u003c/summary\u003e","","Full fine-tune of the Nemotron-2B-Dense-VL backbone (Cosmos3-Edge), on the same Bridge dataset as **Vision SFT (Cosmos3-Nano)**. Step 2 must convert the Cosmos3-Edge checkpoint, not Cosmos3-Nano.","","Launch shell: `examples/launch_sft_vision_edge.sh`","","```shell","BASE_CHECKPOINT_NAME=Cosmos3-Edge","","# Defaults match the launcher (see Step 3 → Option A to override).","uvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \\","    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \\","    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet","uvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \\","    --local-dir examples/checkpoints/wan22_vae --quiet","```","","\u003c/details\u003e","","\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eReasoner Alignment SFT with LLaVA-OneVision (vfm-vlm)\u003c/b\u003e\u003c/summary\u003e","","Alignment SFT for the Reasoner variant on the [lmms-lab/LLaVA-OneVision-Data](https://huggingface.co/datasets/lmms-lab/LLaVA-OneVision-Data) dataset (streamed from HF Hub). Skips Step 2: by default the backbone `Qwen/Qwen3-VL-8B-Instruct` is fetched from the HF Hub by the model downloader at startup — no DCP conversion needed and no required env vars. To instead start from a merged Cosmos3 reasoner snapshot (Cosmos3-Nano LM merged onto the Qwen3-VL visual tower), build it with `convert_model_to_vlm_safetensors` (see [Step 2](#step-2--prepare-checkpoint)) and point `VLM_SAFETENSORS_PATH` at it — same mechanism as the VideoPhy-2 recipe below.","","Launch shell: `examples/launch_sft_llava_ov.sh`","","```shell","# No required env vars. The first launch will populate the HF Hub cache under","# $HF_HOME (defaults to /tmp/hf_cache inside the wrapper); subsequent launches","# reuse the cached snapshot.","#","# (optional) HF_TOKEN raises HF Hub rate limits for the streamed dataset","# revision lookup — useful if you're running 8-rank fan-out from a single IP:","# export HF_TOKEN=hf_...","#","# (optional) VLM_SAFETENSORS_PATH starts training from a local pre-converted","# Qwen3-VL safetensors snapshot (e.g. Cosmos3-Nano LM merged with the Qwen3-VL","# visual tower) instead of the public HF backbone:","# export VLM_SAFETENSORS_PATH=$PWD/examples/checkpoints/Cosmos3-Nano-VLM","```","","\u003c/details\u003e","","\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Nano)\u003c/b\u003e\u003c/summary\u003e","","Reasoner alignment SFT for 1–5 physical-plausibility scoring on [videophysics/videophy2_train](https://huggingface.co/datasets/videophysics/videophy2_train) (HF test split renamed to `videophy2_val/`). `[job].task = \"vlm\"`. Bootstraps from `Cosmos3-Nano`'s language-model weights merged onto the public Qwen3-VL-8B-Instruct visual tower; the merged HF directory is consumed via `[model.backbone].safetensors_path` (plumbed by `VLM_SAFETENSORS_PATH`).","","Launch shell: `examples/launch_sft_videophy2_nano.sh`","","```shell","# Step 1 (data): materialize the public HF dataset into the canonical local layout","# (videophy2_{train,val}/{meta.json, media/, text/}).","python -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \\","    --out_root examples/data/videophysics --split both","```","","\u003c/details\u003e","","\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Super)\u003c/b\u003e\u003c/summary\u003e","","Super-tier counterpart of the VideoPhy-2 recipe above: same 1–5 physical-plausibility scoring on [videophysics/videophy2_train](https://huggingface.co/datasets/videophysics/videophy2_train), but a full fine-tune of the 32B backbone. `[job].task = \"vlm\"`. Bootstraps from `Cosmos3-Super`'s language-model weights merged onto the public Qwen3-VL-32B-Instruct visual tower; the merged HF directory is consumed via `[model.backbone].safetensors_path` (plumbed by `VLM_SAFETENSORS_PATH`). Full-shard FSDP across all ranks, so it runs on a 4-GPU (e.g. GB200x4) or 8-GPU allocation.","","Launch shell: `examples/launch_sft_videophy2_super.sh`","","```shell","# Step 1 (data): same as the nano recipe — materialize the public HF dataset into","# the canonical local layout (videophy2_{train,val}/{meta.json, media/, text/}).","python -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \\","    --out_root examples/data/videophysics --split both","```","","\u003c/details\u003e","","\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eReasoner Alignment SFT with VideoPhy-2 (Cosmos3-Edge)\u003c/b\u003e\u003c/summary\u003e","","Edge-tier counterpart of the VideoPhy-2 recipe above: same 1–5 physical-plausibility scoring on [videophysics/videophy2_train](https://huggingface.co/datasets/videophysics/videophy2_train), but on the compact **Nemotron-2B-Dense-VL** reasoner (SigLIP2 vision tower, `model_type = \"cosmos3_edge\"` — native HF metadata, no remote code; the model classes are registered in-framework) instead of Qwen3-VL. `[job].task = \"vlm\"`. The vision tower is frozen; the projector + LM train at a uniform LR. `[model.backbone].model_name` is the **public, ungated** omni release `nvidia/Cosmos3-Edge`, which supplies the arch/config/tokenizer **and** the reasoner weights: the training loader follows the snapshot's root safetensors index into its weight shards, so weights load directly from the download — no conversion step and no required weights env var. Like the nano/super recipes, `VLM_SAFETENSORS_PATH` is an optional override for loading from a local safetensors directory instead. The reasoner weights shipped inside `nvidia/Cosmos3-Edge` are the canonical Edge reasoner weights — there is no separate reasoner repo to download. Only 2B, so it runs on a 4-GPU (e.g. GB200x4) or 8-GPU allocation.","","Launch shell: `examples/launch_sft_videophy2_edge.sh`","","```shell","# Step 1 (data): same as the nano recipe — materialize the public HF dataset into","# the canonical local layout (videophy2_{train,val}/{meta.json, media/, text/}).","python -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \\","    --out_root examples/data/videophysics --split both","```","","\u003c/details\u003e","","\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eAction-Policy Post-Training (DROID / LIBERO)\u003c/b\u003e\u003c/summary\u003e","","Robot action-policy recipes: DROID (`joint_pos` 8-D actions + proprioceptive state) and","LIBERO (`frame_wise_relative` rot6d 10-D actions), both from Cosmos3-Nano. They follow the same Step 2/Step 3 flow below, with their own data staging","(DROID keep-ranges window filter, LIBERO suite selection), and are documented separately:","","- [DROID action policy](./action_policy_droid_posttrain.md) —","  `examples/launch_sft_action_policy_droid_nano.sh`","- [LIBERO action policy](./action_policy_libero_posttrain.md) —","  `examples/launch_sft_action_policy_libero_10_nano.sh` / `examples/launch_sft_action_policy_libero_all_nano.sh`","","\u003c/details\u003e","","## Step 2 — Prepare checkpoint","","Convert the base checkpoint to [PyTorch Distributed Checkpoint (DCP)](https://pytorch.org/docs/stable/distributed.checkpoint.html) format. `cosmos_framework.scripts.convert_model_to_dcp` ships in the unified `cosmos_framework/` package, so this step runs from the repo root (with the environment activated per [Setup](./setup.md)).","","Set `BASE_CHECKPOINT_NAME` to the value from the recipe block you picked in Step 1 (`Cosmos3-Nano`, `Cosmos3-Super`, or `Cosmos3-Edge`):","","```shell","BASE_CHECKPOINT_NAME=Cosmos3-Nano   # or Cosmos3-Super / Cosmos3-Edge — match the recipe in Step 1","","# Default output dir matches the launcher (see Step 3 → Option A to override).","python -m cosmos_framework.scripts.convert_model_to_dcp \\","  -o examples/checkpoints/$BASE_CHECKPOINT_NAME \\","  --checkpoint-path $BASE_CHECKPOINT_NAME","```","","`$BASE_CHECKPOINT_NAME` (e.g. `Cosmos3-Nano`, `Cosmos3-Super`, `Cosmos3-Edge`) is a registered name in the checkpoint catalog; the converter downloads the matching repo from the Hugging Face Hub and writes the DCP into `examples/checkpoints/$BASE_CHECKPOINT_NAME`.","","**Reasoner Alignment SFT with LLaVA-OneVision (vfm-vlm):** Skip this step — the Reasoner alignment SFT loads `Qwen/Qwen3-VL-8B-Instruct` from the HF Hub at startup (no DCP conversion required). To start from a merged Cosmos3 reasoner snapshot instead, build one with `convert_model_to_vlm_safetensors` (see the VideoPhy-2 note below) and pass it via `VLM_SAFETENSORS_PATH`.","","**Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Nano):** Use `cosmos_framework.scripts.convert_model_to_vlm_safetensors` instead.","","```shell","# Step 2 (VLM checkpoint): merge Cosmos3-Nano LM onto the Qwen3-VL visual tower.","# Replaces the convert_model_to_dcp step used by the VFM recipes above.","python -m cosmos_framework.scripts.convert_model_to_vlm_safetensors \\","    --checkpoint-path Cosmos3-Nano \\","    -o examples/checkpoints/Cosmos3-Nano-VLM","```","","**Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Super):** Same converter, but merge the `Cosmos3-Super` LM onto the **32B** Qwen3-VL visual tower via `--vlm-model-name Qwen/Qwen3-VL-32B-Instruct`.","","```shell","# Step 2 (Super VLM checkpoint): merge Cosmos3-Super LM onto the Qwen3-VL-32B visual tower.","python -m cosmos_framework.scripts.convert_model_to_vlm_safetensors \\","    --checkpoint-path Cosmos3-Super \\","    --vlm-model-name Qwen/Qwen3-VL-32B-Instruct \\","    -o examples/checkpoints/Cosmos3-Super-VLM","```","","**Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Edge):** Skip this step — the recipe loads the reasoner weights directly from the (ungated) `nvidia/Cosmos3-Edge` snapshot at startup: the training loader follows the repo's root safetensors index into its weight shards, so no conversion or extraction is required. To start from a local safetensors directory instead, point `VLM_SAFETENSORS_PATH` at it (optional, same mechanism as the nano recipe).","","## Step 3 — Run training","","**Weights \u0026 Biases (optional):** training recipes default to `job.wandb_mode = \"disabled\"`. To log a run to W\u0026B, set `wandb_mode = \"online\"` under `[job]` in the TOML (or pass `job.wandb_mode=online` as a command-line override) and export `WANDB_API_KEY` in your environment before launching.","","### Option A (recommended): the paired launch shell","","Each recipe ships as a `examples/toml/sft_config/\u003crecipe\u003e.toml` (validated against the pydantic schema at [`cosmos_framework/configs/toml_config/sft_config.py`](../cosmos_framework/configs/toml_config/sft_config.py)) paired with `examples/launch_sft_\u003crecipe\u003e.sh`; the full catalog is indexed in [`examples/README.md`](../examples/README.md). Each `.sh` sources [`examples/_sft_launcher_common.sh`](../examples/_sft_launcher_common.sh) and forwards into `cosmos_framework.scripts.train --sft-toml=\u003crecipe-toml\u003e`. From the repo root, run the launch shell paired with the recipe you set up in Step 1. The wrapper resolves `DATASET_PATH`, `BASE_CHECKPOINT_PATH`, and `WAN_VAE_PATH` from the default locations under `examples/` (populated by Step 1 + Step 2), so no env-var setup is required (see [below](#overriding-the-defaults) to override):","","```shell","# from the repo root, after Step 1 + Step 2:","bash examples/launch_sft_vision_nano.sh","```","","Each launcher's default paths come from the `DATASET_PATH` + `BASE_CHECKPOINT_PATH` defaults declared at the top of its `.sh` (each uses `: \"${VAR:=…}\"` so any value you `export` in the shell before launching wins over the default):","","| Launch shell                   | Post-Training Task | Default $DATASET_PATH (under examples/data/)               | Default $BASE_CHECKPOINT_PATH (under examples/checkpoints/)        |","| ------------------------------ | ------------------ | ---------------------------------------------------------- | ------------------------------------------------------------------ |","| `launch_sft_vision_nano.sh`    | Generator SFT      | `BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge` | `Cosmos3-Nano`                                                     |","| `launch_sft_vision_super.sh`   | Generator SFT      | `BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge` | `Cosmos3-Super`                                                    |","| `launch_sft_vision_edge.sh`    | Generator SFT      | `BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge` | `Cosmos3-Edge`                                                     |","| `launch_sft_llava_ov.sh`       | Reasoner SFT       | (none; dataset streams from HF Hub)                        | (none; backbone fetched at startup, or set `VLM_SAFETENSORS_PATH`) |","| `launch_sft_videophy2_nano.sh` | Reasoner SFT       | (none; set `VIDEOPHYSICS_ROOT` env)                        | (none; set `VLM_SAFETENSORS_PATH` env)                             |","| `launch_sft_videophy2_super.sh`| Reasoner SFT       | (none; set `VIDEOPHYSICS_ROOT` env)                        | (none; set `VLM_SAFETENSORS_PATH` env — Cosmos3-Super-VLM merge)   |","| `launch_sft_videophy2_edge.sh` | Reasoner SFT       | (none; set `VIDEOPHYSICS_ROOT` env)                        | (none; weights load directly from `nvidia/Cosmos3-Edge`)           |","","`WAN_VAE_PATH` defaults to `examples/checkpoints/wan22_vae/Wan2.2_VAE.pth` for every non-reasoner recipe.","","Cosmos3-Edge is only 2B and also fits a 4-GPU node — e.g. `NPROC_PER_NODE=4 bash examples/launch_sft_vision_edge.sh` (tested on 4×GB200).","","**Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Nano):**","","```shell","# Step 3 (launch): export both env vars, then launch.","export VIDEOPHYSICS_ROOT=$PWD/examples/data/videophysics","export VLM_SAFETENSORS_PATH=$PWD/examples/checkpoints/Cosmos3-Nano-VLM","bash examples/launch_sft_videophy2_nano.sh","```","","**Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Super):**","","```shell","# Same as the nano recipe, but point VLM_SAFETENSORS_PATH at the Cosmos3-Super","# merge from Step 2. On a 4-GPU node (e.g. GB200x4) also set NPROC_PER_NODE=4.","export VIDEOPHYSICS_ROOT=$PWD/examples/data/videophysics","export VLM_SAFETENSORS_PATH=$PWD/examples/checkpoints/Cosmos3-Super-VLM","bash examples/launch_sft_videophy2_super.sh","```","","**Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Edge):**","","```shell","# Same as the nano recipe, but no VLM_SAFETENSORS_PATH is needed: the reasoner","# weights load directly from the (ungated) nvidia/Cosmos3-Edge snapshot.","# Only 2B — on a 4-GPU node set NPROC_PER_NODE=4.","export VIDEOPHYSICS_ROOT=$PWD/examples/data/videophysics","bash examples/launch_sft_videophy2_edge.sh","```","","#### Overriding the defaults","","If you'd rather put data or checkpoints on a different filesystem (e.g. a faster SSD or shared mount), download to your chosen path in Step 1 / convert the DCP to your chosen path in Step 2, then export the matching env var(s) before launching:","","```shell","# Example: data on /scratch, base DCP on /nfs/ckpts.","export DATASET_PATH=/scratch/BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge","export BASE_CHECKPOINT_PATH=/nfs/ckpts/Cosmos3-Nano","export WAN_VAE_PATH=/nfs/ckpts/wan22_vae/Wan2.2_VAE.pth","bash examples/launch_sft_vision_nano.sh","```","","Each env var falls back to its default if unset, so you only need to export the ones you're moving. The downloads / `convert_model_to_dcp` commands in Step 1 + Step 2 just need their `--local-dir` / `-o` argument pointed at the same path you export here. `.gitignore` excludes `examples/data/` and `examples/checkpoints/` so the multi-GB downloads aren't tracked when you keep the defaults.","","### Option B: raw `torchrun`","","If you'd rather not use the paired launch shell, invoke `torchrun` directly with the recipe's TOML. Unlike Option A, **raw `torchrun` does not auto-resolve `DATASET_PATH` / `BASE_CHECKPOINT_PATH` / `WAN_VAE_PATH` from `examples/`** — they have to come from your shell:","","- `BASE_CHECKPOINT_PATH` and `WAN_VAE_PATH` are read via `${oc.env:BASE_CHECKPOINT_PATH}` / `${oc.env:WAN_VAE_PATH}` at the TOML's `[checkpoint].load_path` / `[model.tokenizer].vae_path` keys.","- `DATASET_PATH` is read via `${oc.env:DATASET_PATH}` inside the experiment-SKU Python (e.g. `cosmos_framework/configs/base/experiment/sft/\u003crecipe\u003e.py`), not in the TOML.","","You have two options to fill them in (pick either, not both):","","1. **Export them in the shell before `torchrun`** (whether they point at the default `examples/...` paths from Step 1+2 or your own overrides) — shown below.","2. **Edit the TOML by hand** — open `examples/toml/sft_config/\u003crecipe\u003e.toml` and replace the `${oc.env:BASE_CHECKPOINT_PATH}` / `${oc.env:WAN_VAE_PATH}` placeholders with literal paths. Useful if you want a self-contained TOML you can hand to a colleague or commit alongside an experiment record. (Hand-editing won't help for `DATASET_PATH` — that's resolved out of the experiment Python, so you must still export it.)","","Run from the repo root (the directory containing `pyproject.toml` and `examples/`); the snippet uses `$PWD` to absolutize the relative paths.","","```shell","# This example uses the vision_sft_nano recipe end-to-end (same recipe as","# Option A). To switch recipes, swap TOML_FILE + DATASET_PATH per the table in","# Option A, and Cosmos3-Nano → Cosmos3-Super on the LoRA / super recipes.","TOML_FILE=\"examples/toml/sft_config/vision_sft_nano.toml\"","","# Match the launcher's defaults — or substitute your own paths.","export DATASET_PATH=\"$PWD/examples/data/BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge\"","export BASE_CHECKPOINT_PATH=\"$PWD/examples/checkpoints/Cosmos3-Nano\"","export WAN_VAE_PATH=\"$PWD/examples/checkpoints/wan22_vae/Wan2.2_VAE.pth\"","","IMAGINAIRE_OUTPUT_ROOT=outputs/train PYTHONPATH=. \\","torchrun --nproc_per_node=8 -m cosmos_framework.scripts.train \\","    --sft-toml=$TOML_FILE","```","","To resume from the latest in-progress checkpoint, point `BASE_CHECKPOINT_PATH` at the run's `checkpoints/iter_\u003cN\u003e/` directory under `$IMAGINAIRE_OUTPUT_ROOT/\u003cproject\u003e/\u003cgroup\u003e/\u003cname\u003e/` (see [Outputs](#outputs) below for the full layout).","","## Outputs","","Outputs land under `$IMAGINAIRE_OUTPUT_ROOT/\u003cproject\u003e/\u003cgroup\u003e/\u003cname\u003e/`:","","1. `config.yaml`, `config.pkl`: Finalized resolved config (YAML for inspection, pickle for re-instantiation).","1. `launch_info.yaml`, `job_env.yaml`: Job metadata and captured launch environment.","1. `checkpoints/`:","    1. `latest_checkpoint.txt`: Pointer file containing the latest checkpoint directory name (e.g. `iter_000000200`).","    1. `iter_\u003citer\u003e/`: DCP checkpoint saved every `[train.ckpt].save_freq` iterations (zero-padded 9-digit, e.g. `iter_000000200/`):","        1. `model/`: model weights (sharded `.distcp`).","        1. `optim/`: optimizer state.","        1. `scheduler/`: LR scheduler state.","        1. `trainer/`: training state — includes the `iteration` counter and per-rank `rng_state_\u003ci\u003e` (numpy + random + torch + torch_cuda).","        1. `dataloader/`: optional per-rank pickle shards (`rank_\u003ci\u003e.pkl`) — only present for dataloaders that implement `has_state()`.","1. `\u003ccallback_name\u003e/`: Callback outputs, one directory per registered callback (e.g. `DeviceMonitor/`, `EveryNDrawSample/`, `norm_monitor/`).","1. `wandb/`, `wandb_id.txt`: Wandb run files — only present when `[job].wandb_mode` is `online` or `offline`.","","The shorthand `$RUN_DIR` used in the rest of this page refers to `$IMAGINAIRE_OUTPUT_ROOT/\u003cproject\u003e/\u003cgroup\u003e/\u003cname\u003e`. For example, with `IMAGINAIRE_OUTPUT_ROOT=outputs/train` and the `vision_sft_nano` recipe, `$RUN_DIR` is `outputs/train/cosmos3/sft/vision_sft_nano`.","","## Hybrid video reasoning SFT","","The `video_reasoning_sft.toml` recipe accepts existing DAFT `tao-vl-reason-v1.0`","annotations directly through Framework's native dataset loader. It also accepts","the equivalent `cosmos-video-reasoning-v1.0` records. No dataset conversion or","`nvidia-tao-daft` runtime installation is needed. Each JSON object contains an","`items` array with `question`, `answer`, optional `reasoning`, and `video_id` fields:","","```json","{","  \"items\": [","    {","      \"video_id\": \"clip.mp4\",","      \"question\": \"Why does the car stop?\",","      \"answer\": \"The light is red.\",","      \"reasoning\": \"The car approaches a red traffic light.\"","    }","  ]","}","```","","Set annotation paths independently for training and validation. A single path","or a JSON array of paths is accepted; multiple files are concatenated in order.","For example, with a staged Cosmos3-Nano VLM safetensors checkpoint:","","```shell","export VLM_SAFETENSORS_PATH=/checkpoints/cosmos3-nano-vlm","export COSMOS_VIDEO_TRAIN_ANNOTATIONS='[\"/data/train-bcq.json\", \"/data/train-mcq.json\"]'","export COSMOS_VIDEO_VAL_ANNOTATIONS=/data/val.json","export COSMOS_VIDEO_TRAIN_MEDIA_ROOTS=/data/videos","export COSMOS_VIDEO_VAL_MEDIA_ROOTS=/data/videos","export COSMOS_VIDEO_TRAIN_RESPONSE_MODE=hybrid","export COSMOS_VIDEO_VAL_RESPONSE_MODE=answer","","torchrun --nproc-per-node=4 -m cosmos_framework.scripts.train \\","  --sft-toml=examples/toml/sft_config/video_reasoning_sft.toml \\","  -- trainer.seed=42","```","","Media roots may be a shared path or a JSON array matching the annotation paths.","When omitted, Framework resolves an annotation's `media_root` relative to its","JSON directory, or uses that directory if the field is absent. The older","Cosmos-RL DAFT hook uses the annotation directory when no explicit root is given,","ignoring an embedded `media_root`; supply explicit roots to preserve those paths.","These video recipes do not support `image_id` records.","","Each split accepts these settings (`TRAIN` or `VAL` replaces `{SPLIT}`):","","| Environment variable                 | Meaning                                                            | Default                                        |","| ------------------------------------ | ------------------------------------------------------------------ | ---------------------------------------------- |","| `COSMOS_VIDEO_{SPLIT}_RESPONSE_MODE` | `answer`, `think`, or `hybrid`                                     | `hybrid` for training; `answer` for validation |","| `COSMOS_VIDEO_{SPLIT}_SAMPLE_STRIDE` | Select every Nth raw item; positive integer                        | `1`                                            |","| `COSMOS_VIDEO_{SPLIT}_SAMPLE_OFFSET` | Start at this raw index; non-negative integer                      | `0`                                            |","| `COSMOS_VIDEO_{SPLIT}_LIMIT`         | Maximum exposed samples after response expansion; positive integer | Unset (unlimited)                              |","| `COSMOS_VIDEO_SYSTEM_PROMPT`         | Optional system message for both splits                            | Empty                                          |","","`answer` targets contain the answer alone. `think` targets contain","`\u003cthink\u003e\\n{reasoning}\\n\u003c/think\u003e\\n\\n{answer}`, falling back to the answer if","reasoning is absent or empty. `hybrid` exposes two targets per selected raw item,","interleaved as answer, think, answer, think, matching the Cosmos-RL DAFT hook.","Stride and offset apply before expansion; the limit applies afterward and may","end on an unpaired answer when odd. An offset past the input produces no samples.","For example, stride `2`, offset `1`, and limit `3` expose the answer and think","targets for raw item `1`, then the answer target for raw item `3`.","","The reasoning processor applies the Qwen3-VL Instruct chat template to preserve","explicit think tags and avoid an injected empty think block. Loss masking trains","assistant tokens, including supplied reasoning, while ignoring prompt tokens.","Framework uses its native TorchCodec video processor and lifecycle/checkpoint","callbacks; this migration preserves the response/sampling contract, not the","Cosmos-RL decoder implementation. Adjust frame/pixel budgets and the smoke","recipe's training schedule for your workload; its fixed optimizer-step budget","does not automatically double in hybrid mode. The Edge experiment is","`cosmos_task_aware_video_reasoning_edge` and uses the same dataset settings; use","an Edge checkpoint and its corresponding model and token budgets.","","## Export checkpoint to Hugging Face safetensors","","Export the DCP checkpoint produced in Step 3 to a Hugging Face safetensors checkpoint:","","```shell","RUN_DIR=$IMAGINAIRE_OUTPUT_ROOT/\u003cproject\u003e/\u003cgroup\u003e/\u003cname\u003e","","CHECKPOINT_ITER=$(cat $RUN_DIR/checkpoints/latest_checkpoint.txt)","CHECKPOINT_PATH=$RUN_DIR/checkpoints/$CHECKPOINT_ITER","","python -m cosmos_framework.scripts.export_model \\","  --checkpoint-path $CHECKPOINT_PATH \\","  --config-file $RUN_DIR/config.yaml \\","  -o $RUN_DIR/model","```","","The exported safetensors land at `$RUN_DIR/model` and can be used in [Inference](../README.md#inference) commands by passing `--checkpoint-path $RUN_DIR/model`.","","### ViT / vision tower (Cosmos3-Edge)","","The plain export above is all any recipe needs — Edge included. For Cosmos3-Edge, `export_model` bundles the SigLIP2 vision tower into `$RUN_DIR/model/vision_encoder/` and the processor/tokenizer files into the export root, so the exported directory is **self-contained**: inference runs from it offline, with no Hub download (see [Inference → Reasoner](./inference.md#reasoner)). `export_manifest.json` records where the tower and processor came from. Nano/Super exports bundle their processor files the same way.","","Optional flags:","","```shell","# --no-vit: generation-only export (T2V / I2V / V2V / T2I), ~1 GB smaller.","#     Writes include_visual=false so the checkpoint loads cleanly everywhere.","python -m cosmos_framework.scripts.export_model \\","  --checkpoint-path $CHECKPOINT_PATH \\","  --config-file $RUN_DIR/config.yaml \\","  --no-vit \\","  -o $RUN_DIR/model","","# --vit-checkpoint-path: use a custom tower from a local directory","#     (a snapshot root or a vision_encoder/ directory).","python -m cosmos_framework.scripts.export_model \\","  --checkpoint-path $CHECKPOINT_PATH \\","  --config-file $RUN_DIR/config.yaml \\","  --vit-checkpoint-path /path/to/snapshot \\","  -o $RUN_DIR/model","","# --verify: smoke-test the export on this node's GPU (tiny reasoner query +","#     tiny generation). A failure exits non-zero but keeps the export.","python -m cosmos_framework.scripts.export_model \\","  --checkpoint-path $CHECKPOINT_PATH \\","  --config-file $RUN_DIR/config.yaml \\","  --verify \\","  -o $RUN_DIR/model","```","","## Convert to Diffusers","","Convert the Hugging Face export from the previous step into a Diffusers pipeline (`transformer/`, `vae/`, `scheduler/`, `text_tokenizer/`, `model_index.json`, …):","","```shell","python -m cosmos_framework.scripts.convert_model_to_diffusers \\","  --checkpoint-path $RUN_DIR/model \\","  -o $RUN_DIR/diffusers","```","","The input is the Hugging Face safetensors directory produced by `export_model` above — not a raw DCP checkpoint, so run the export first. The result at `$RUN_DIR/diffusers` can be loaded with `diffusers` or passed to [Inference](../README.md#inference) via `--checkpoint-path $RUN_DIR/diffusers`.","","A generation-only checkpoint with no reasoner vision tower (`include_visual` unset) is converted without a `vision_encoder/` sidecar automatically; pass `--skip-vision-encoder` to force-skip it even when a tower is present.","","## Config","","The recipe TOML is parsed against the pydantic schema [`SFTExperimentConfig`](../cosmos_framework/configs/toml_config/sft_config.py) at load time. Every top-level key listed below maps to a sub-model in that file; unknown keys raise a `ValidationError` before training starts (`extra=\"forbid\"` on every sub-model). Values may use OmegaConf env interpolation `${oc.env:NAME}` — the recipe TOMLs use this for `BASE_CHECKPOINT_PATH` (`[checkpoint].load_path`) and `WAN_VAE_PATH` (`[model.tokenizer].vae_path`). `DATASET_PATH` is consumed the same way but inside the experiment-SKU Python (`cosmos_framework/configs/base/experiment/sft/\u003crecipe\u003e.py`), not in the TOML.","","For the full field-by-field reference (every section, every default, every VFM/VLM applicability note, the `\"???\"` MISSING sentinel, env interpolation, the VFM↔VLM path-remap table, and how to extend the schema), see [SFT Structured-TOML Config Reference](./sft_config.md).","","The commonly tuned knobs:","","1. `[job]`","    1. `task` — `\"vfm\"` (generator recipes) or `\"vlm\"` (Reasoner alignment). Picks the base config: `cosmos_framework/configs/base/config.py` vs `…/vlm/config.py`. Also drives `PATH_REMAPS` in `toml_config_helper.py`.","    1. `experiment` — Registered experiment SKU name (e.g. `vision_sft_nano`). Each SKU is a Python file under `cosmos_framework/configs/base/experiment/sft/` that wires up dataloader, model variant, and recipe-specific defaults.","    1. `project`, `group`, `name` — Components of the run output dir `$IMAGINAIRE_OUTPUT_ROOT/\u003cproject\u003e/\u003cgroup\u003e/\u003cname\u003e/`. Also flow to W\u0026B as the project / group / run name.","    1. `wandb_mode` — `\"online\"` (logs to W\u0026B; `WANDB_API_KEY` must be set), `\"offline\"` (logs locally, sync later with `wandb sync`), or `\"disabled\"`.","1. `[model]`","    1. `max_num_tokens_after_packing` — VFM token-packing target. `-1` disables the cap. VFM only; VLM uses `data_setting.max_tokens` (tail override).","    1. `joint_attn_implementation` — VFM attention layout: `\"two_way\"` / `\"three_way\"` (NATTEN) / `\"flex\"`.","    1. `attn_implementation` — VLM attention impl: `\"cosmos\"` / `\"flash_attention_2\"` / `\"sdpa\"` / `\"eager\"`. VLM only.","    1. `lora_enabled`, `lora_rank`, `lora_alpha`, `lora_target_modules` — LoRA adapter knobs for the generation pathway. Used by SUPER-tier recipes; NANO-tier leaves `lora_enabled=false`. VFM only.","1. `[model.ema]`","    1. `enabled`, `rate`, `iteration_shift` — Exponential moving average of generation-pathway weights. Full fine-tunes typically enable it; LoRA recipes leave it off.","1. `[model.parallelism]`","    1. `data_parallel_shard_degree` — FSDP shard degree. `data_parallel_shard_degree × data_parallel_replicate_degree × context_parallel_shard_degree` must equal `WORLD_SIZE`. `-1` autoselects from torchrun world size.","    1. `data_parallel_replicate_degree` — HSDP replicate degree (outer replicate loop over the shard topology).","    1. `context_parallel_shard_degree` — Context-parallel shard degree. `\u003e1` splits the sequence dim across ranks (used by super-tier configs: DP=4, CP=2 → 8 GPUs).","    1. `cfg_parallel_shard_degree` — Classifier-free-guidance shard degree. Almost always `1` for SFT.","    1. `fsdp_master_dtype` — Master parameter / FSDP reduce dtype: typically `\"float32\"`.","1. `[model.compile]`","    1. `enabled` — Enable `torch.compile`. Improves speed at the cost of memory.","    1. `compile_dynamic` — Whether to compile with symbolic-shape (dynamic) kernels. `True` (default) is appropriate for training; AR inference may prefer `False` for stable shapes.","1. `[model]`","    1. `precision` — Compute dtype for forward/backward: `\"bfloat16\"` / `\"float16\"` / `\"float32\"`. Master weights stay fp32 separately.","1. `[model.activation_checkpointing]`","    1. `mode` — `\"none\"` / `\"selective\"` (per-op SAC, MoT-only) / `\"full\"` (per-block checkpointing).","    1. `save_ops_regex` — Regex patterns for ops to keep saved under `mode=\"selective\"`.","    1. `preserve_rng_state`, `determinism_check` — Recompute determinism plumbing.","1. `[model.tokenizer]`","    1. `vae_path` — Wan2.2 VAE `.pth` path. Recipe TOMLs use `\"${oc.env:WAN_VAE_PATH}\"`. VFM only.","1. `[optimizer]`","    1. `lr` — Base learning rate.","    1. `betas`, `eps`, `fused`, `weight_decay` — Standard AdamW knobs. `eps` is VFM-only.","    1. `keys_to_select` — Substring allowlist for trainable params. Empty list = train everything; `[\"lora_\"]` = adapter-only fine-tune.","1. `[optimizer.lr_multipliers]`","    1. Inline table of `\u003csubstring\u003e = \u003cmultiplier\u003e` pairs that scale the LR of params whose name contains the substring. The shipped vision recipes leave this empty (Hydra default `{}` stands).","1. `[scheduler]`","    1. `cycle_lengths`, `warm_up_steps` — Cycle length and warmup duration (lists, one entry per cycle), in optimizer steps.","    1. `f_max`, `f_min`, `f_start` — LR multipliers at peak / trough / step-0 (ratios of `optimizer.lr`).","    1. `verbosity_interval` — Scheduler-side LR log frequency. VFM only.","1. `[trainer]`","    1. `max_iter` — Total optimizer steps.","    1. `grad_accum_iter` — Micro-batches per optimizer step. Effective global batch = `grad_accum_iter × per-rank batch × world_size`.","    1. `logging_iter` — Console / W\u0026B scalar log frequency.","    1. `distributed_parallelism` — `\"fsdp\"` is the only supported value.","1. `[trainer.callbacks.compile_tokenizer]`","    1. `enabled`, `compile_after_iterations`, `warmup_resolutions` — Lazy `torch.compile` of the VAE tokenizer. VFM only.","1. `[trainer.callbacks.grad_clip]`","    1. `clip_norm` — Max global L2 norm of the gradient (steps with larger norm are rescaled).","    1. `force_finite` — Replace NaN/Inf grads with zero (default `true` on VFM, `false` on VLM).","1. `[checkpoint]`","    1. `load_path` — Base DCP checkpoint directory to resume from (Step 2 output, or a prior run's `checkpoints/iter_\u003cN\u003e/`). Recipe TOMLs use `\"${oc.env:BASE_CHECKPOINT_PATH}\"`.","    1. `save_iter` — Save a new DCP checkpoint every N optimizer steps.","    1. `keys_to_skip_loading` — Substring blocklist applied at load time. Used to mask EMA / LoRA tensors when warm-starting from a checkpoint that doesn't have them yet.","1. `[dataloader_train]` — Top-level scalars only; the dataloader's class (LazyCall) and pipeline wiring (datasets, packers, …) stay in the experiment Python.","    1. `max_samples_per_batch` — Per-micro-batch sample cap (remapped to `max_batch_size` on the VLM packer). `null` / omitted = no per-count cap.","    1. `max_sequence_length` — Per-packed-sequence token cap (remapped to `max_tokens` on the VLM packer).","    1. `seed` — Dataloader RNG seed (VFM only).","","### Common Hydra tail overrides","","These knobs aren't part of the pydantic schema today; pass them as trailing `key.path=value` positionals after `--` (the `cosmos_framework.scripts.train` flow forwards them through OmegaConf):","","- `model.config.policy.backbone.model_name` — VLM backbone HF identifier (e.g. `Qwen/Qwen3-VL-8B-Instruct`). Used by `launch_sft_llava_ov.sh`.","- `data_setting.max_tokens` — VLM token-packing cap (the VLM analogue of `[model].max_num_tokens_after_packing`). Used by `launch_sft_llava_ov.sh`.","","The launchers wire these via `TAIL_OVERRIDES=(…)`; the helper appends `-- \"${TAIL_OVERRIDES[@]}\"` after the `--sft-toml=` argument."],"stylingDirectives":[[[0,40,"pl-mh"],[2,40,"pl-en"]],[],[[0,10,"pl-c"],[0,4,"pl-c"],[7,10,"pl-c"]],[],[[0,70,"pl-ms"]],[],[[0,2,"pl-s"],[19,21,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[35,36,"pl-s"],[36,37,"pl-s"],[37,70,"pl-corl"],[70,71,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[30,31,"pl-s"],[31,32,"pl-s"],[32,59,"pl-corl"],[59,60,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[24,25,"pl-s"],[25,26,"pl-s"],[26,47,"pl-corl"],[47,48,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[52,53,"pl-s"],[53,54,"pl-s"],[54,99,"pl-corl"],[99,100,"pl-s"]],[[4,5,"pl-v"],[6,7,"pl-s"],[30,31,"pl-s"],[31,32,"pl-s"],[32,56,"pl-corl"],[56,57,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[19,20,"pl-s"],[20,28,"pl-c1"],[28,29,"pl-s"],[29,30,"pl-s"],[30,31,"pl-s"],[31,53,"pl-corl"],[53,54,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[10,11,"pl-s"],[11,12,"pl-s"],[12,20,"pl-corl"],[20,21,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[29,30,"pl-s"],[30,31,"pl-s"],[31,58,"pl-corl"],[58,59,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[48,49,"pl-s"],[49,50,"pl-s"],[50,96,"pl-corl"],[96,97,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[38,39,"pl-s"],[39,40,"pl-s"],[40,71,"pl-corl"],[71,72,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[23,24,"pl-s"],[24,25,"pl-s"],[25,46,"pl-corl"],[46,47,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[9,10,"pl-s"],[10,11,"pl-s"],[11,18,"pl-corl"],[18,19,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[32,33,"pl-s"],[33,34,"pl-s"],[34,62,"pl-corl"],[62,63,"pl-s"]],[],[[0,70,"pl-ms"]],[],[[0,10,"pl-c"],[0,4,"pl-c"],[7,10,"pl-c"]],[],[],[],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[8,9,"pl-s"],[9,10,"pl-s"],[10,28,"pl-corl"],[28,29,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[24,25,"pl-s"],[25,26,"pl-s"],[26,52,"pl-corl"],[52,53,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[6,7,"pl-s"],[7,8,"pl-s"],[8,16,"pl-corl"],[16,17,"pl-s"]],[],[[87,88,"pl-s"],[88,89,"pl-s"],[89,98,"pl-c1"],[98,99,"pl-s"],[99,100,"pl-s"],[100,101,"pl-s"],[101,122,"pl-corl"],[122,123,"pl-s"]],[],[[0,35,"pl-mh"],[3,35,"pl-en"]],[],[[104,105,"pl-s"],[105,129,"pl-c1"],[129,130,"pl-s"],[139,140,"pl-s"],[140,148,"pl-c1"],[148,149,"pl-s"]],[],[[48,49,"pl-s"],[49,73,"pl-c1"],[73,74,"pl-s"],[79,80,"pl-s"],[80,125,"pl-c1"],[125,126,"pl-s"],[163,164,"pl-s"],[164,177,"pl-c1"],[177,178,"pl-s"],[183,184,"pl-s"],[184,197,"pl-c1"],[197,198,"pl-s"],[204,205,"pl-s"],[222,223,"pl-s"],[223,224,"pl-s"],[224,269,"pl-corl"],[269,270,"pl-s"]],[],[],[],[[1,8,"pl-ent"],[9,13,"pl-e"],[15,22,"pl-ent"],[24,25,"pl-ent"],[53,54,"pl-ent"],[57,64,"pl-ent"]],[],[[19,20,"pl-s"],[64,65,"pl-s"],[65,66,"pl-s"],[66,152,"pl-corl"],[152,153,"pl-s"],[155,156,"pl-s"],[156,169,"pl-c1"],[169,170,"pl-s"],[206,207,"pl-s"],[207,237,"pl-c1"],[237,238,"pl-s"],[285,286,"pl-s"],[286,298,"pl-c1"],[298,299,"pl-s"],[454,455,"pl-s"],[464,465,"pl-s"],[465,466,"pl-s"],[466,494,"pl-corl"],[494,495,"pl-s"],[501,502,"pl-s"],[524,525,"pl-s"],[525,526,"pl-s"],[526,551,"pl-corl"],[551,552,"pl-s"]],[],[[14,15,"pl-s"],[15,49,"pl-c1"],[49,50,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[],[],[[0,66,"pl-c"],[0,1,"pl-c"]],[],[],[],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"],[10,17,"pl-ent"],[19,20,"pl-ent"],[54,55,"pl-ent"],[58,65,"pl-ent"]],[],[[76,78,"pl-s"],[103,105,"pl-s"]],[],[[14,15,"pl-s"],[15,50,"pl-c1"],[50,51,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[],[],[[0,66,"pl-c"],[0,1,"pl-c"]],[],[],[],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"],[10,17,"pl-ent"],[19,20,"pl-ent"],[48,49,"pl-ent"],[52,59,"pl-ent"]],[],[[98,100,"pl-s"],[125,127,"pl-s"]],[],[[14,15,"pl-s"],[15,49,"pl-c1"],[49,50,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[],[],[[0,66,"pl-c"],[0,1,"pl-c"]],[],[],[],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"],[10,17,"pl-ent"],[19,20,"pl-ent"],[76,77,"pl-ent"],[80,87,"pl-ent"]],[],[[46,47,"pl-s"],[76,77,"pl-s"],[77,78,"pl-s"],[78,139,"pl-corl"],[139,140,"pl-s"],[211,212,"pl-s"],[212,237,"pl-c1"],[237,238,"pl-s"],[482,483,"pl-s"],[483,515,"pl-c1"],[515,516,"pl-s"],[522,523,"pl-s"],[529,530,"pl-s"],[530,531,"pl-s"],[531,558,"pl-corl"],[558,559,"pl-s"],[571,572,"pl-s"],[572,592,"pl-c1"],[592,593,"pl-s"]],[],[[14,15,"pl-s"],[15,46,"pl-c1"],[46,47,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,77,"pl-c"],[0,1,"pl-c"]],[[0,78,"pl-c"],[0,1,"pl-c"]],[[0,28,"pl-c"],[0,1,"pl-c"]],[[0,1,"pl-c"],[0,1,"pl-c"]],[[0,72,"pl-c"],[0,1,"pl-c"]],[[0,77,"pl-c"],[0,1,"pl-c"]],[[0,24,"pl-c"],[0,1,"pl-c"]],[[0,1,"pl-c"],[0,1,"pl-c"]],[[0,76,"pl-c"],[0,1,"pl-c"]],[[0,78,"pl-c"],[0,1,"pl-c"]],[[0,50,"pl-c"],[0,1,"pl-c"]],[[0,72,"pl-c"],[0,1,"pl-c"]],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"],[10,17,"pl-ent"],[19,20,"pl-ent"],[76,77,"pl-ent"],[80,87,"pl-ent"]],[],[[64,65,"pl-s"],[93,94,"pl-s"],[94,95,"pl-s"],[95,155,"pl-corl"],[155,156,"pl-s"],[183,184,"pl-s"],[184,198,"pl-c1"],[198,199,"pl-s"],[202,203,"pl-s"],[203,221,"pl-c1"],[221,222,"pl-s"],[240,241,"pl-s"],[241,253,"pl-c1"],[253,254,"pl-s"],[378,379,"pl-s"],[379,412,"pl-c1"],[412,413,"pl-s"],[426,427,"pl-s"],[427,447,"pl-c1"],[447,448,"pl-s"]],[],[[14,15,"pl-s"],[15,52,"pl-c1"],[52,53,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,82,"pl-c"],[0,1,"pl-c"]],[[0,53,"pl-c"],[0,1,"pl-c"]],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"],[10,17,"pl-ent"],[19,20,"pl-ent"],[77,78,"pl-ent"],[81,88,"pl-ent"]],[],[[97,98,"pl-s"],[126,127,"pl-s"],[127,128,"pl-s"],[128,188,"pl-corl"],[188,189,"pl-s"],[233,234,"pl-s"],[234,252,"pl-c1"],[252,253,"pl-s"],[271,272,"pl-s"],[272,285,"pl-c1"],[285,286,"pl-s"],[411,412,"pl-s"],[412,445,"pl-c1"],[445,446,"pl-s"],[459,460,"pl-s"],[460,480,"pl-c1"],[480,481,"pl-s"]],[],[[14,15,"pl-s"],[15,53,"pl-c1"],[53,54,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,81,"pl-c"],[0,1,"pl-c"]],[[0,80,"pl-c"],[0,1,"pl-c"]],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"],[10,17,"pl-ent"],[19,20,"pl-ent"],[76,77,"pl-ent"],[80,87,"pl-ent"]],[],[],[],[[14,15,"pl-s"],[15,52,"pl-c1"],[52,53,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,81,"pl-c"],[0,1,"pl-c"]],[[0,80,"pl-c"],[0,1,"pl-c"]],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"],[10,17,"pl-ent"],[19,20,"pl-ent"],[67,68,"pl-ent"],[71,78,"pl-ent"]],[],[[36,37,"pl-s"],[37,46,"pl-c1"],[46,47,"pl-s"]],[[8,9,"pl-s"],[9,28,"pl-c1"],[28,29,"pl-s"]],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[22,23,"pl-s"],[23,24,"pl-s"],[24,58,"pl-corl"],[58,59,"pl-s"]],[[2,3,"pl-s"],[3,50,"pl-c1"],[50,51,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[23,24,"pl-s"],[24,25,"pl-s"],[25,60,"pl-corl"],[60,61,"pl-s"]],[[2,3,"pl-s"],[3,54,"pl-c1"],[54,55,"pl-s"],[58,59,"pl-s"],[59,111,"pl-c1"],[111,112,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[0,30,"pl-mh"],[3,30,"pl-en"]],[],[[31,32,"pl-s"],[68,69,"pl-s"],[69,70,"pl-s"],[70,129,"pl-corl"],[129,130,"pl-s"],[139,140,"pl-s"],[140,185,"pl-c1"],[185,186,"pl-s"],[208,209,"pl-s"],[209,226,"pl-c1"],[226,227,"pl-s"],[310,311,"pl-s"],[316,317,"pl-s"],[317,318,"pl-s"],[318,328,"pl-corl"],[328,329,"pl-s"]],[],[[4,5,"pl-s"],[5,25,"pl-c1"],[25,26,"pl-s"],[84,85,"pl-s"],[85,97,"pl-c1"],[97,98,"pl-s"],[100,101,"pl-s"],[101,114,"pl-c1"],[114,115,"pl-s"],[120,121,"pl-s"],[121,133,"pl-c1"],[133,134,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[36,98,"pl-c"],[36,37,"pl-c"]],[],[[0,78,"pl-c"],[0,1,"pl-c"]],[],[[26,47,"pl-smi"]],[[20,41,"pl-smi"]],[[0,3,"pl-s"]],[],[[0,1,"pl-s"],[1,22,"pl-c1"],[22,23,"pl-s"],[30,31,"pl-s"],[31,43,"pl-c1"],[43,44,"pl-s"],[46,47,"pl-s"],[47,60,"pl-c1"],[60,61,"pl-s"],[63,64,"pl-s"],[64,76,"pl-c1"],[76,77,"pl-s"],[219,220,"pl-s"],[220,262,"pl-c1"],[262,263,"pl-s"]],[],[[0,2,"pl-s"],[56,58,"pl-s"],[109,110,"pl-s"],[110,135,"pl-c1"],[135,136,"pl-s"],[267,268,"pl-s"],[268,300,"pl-c1"],[300,301,"pl-s"],[350,351,"pl-s"],[351,371,"pl-c1"],[371,372,"pl-s"]],[],[[0,2,"pl-s"],[56,58,"pl-s"],[63,64,"pl-s"],[64,121,"pl-c1"],[121,122,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,80,"pl-c"],[0,1,"pl-c"]],[[0,71,"pl-c"],[0,1,"pl-c"]],[],[],[],[[0,3,"pl-s"]],[],[[0,2,"pl-s"],[57,59,"pl-s"],[90,91,"pl-s"],[91,104,"pl-c1"],[104,105,"pl-s"],[118,120,"pl-s"],[123,125,"pl-s"],[152,153,"pl-s"],[153,196,"pl-c1"],[196,197,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,91,"pl-c"],[0,1,"pl-c"]],[],[],[],[],[[0,3,"pl-s"]],[],[[0,2,"pl-s"],[56,58,"pl-s"],[142,143,"pl-s"],[143,162,"pl-c1"],[162,163,"pl-s"],[374,375,"pl-s"],[375,395,"pl-c1"],[395,396,"pl-s"]],[],[[0,24,"pl-mh"],[3,24,"pl-en"]],[],[[0,2,"pl-s"],[30,32,"pl-s"],[61,62,"pl-s"],[62,89,"pl-c1"],[89,90,"pl-s"],[117,118,"pl-s"],[118,139,"pl-c1"],[139,140,"pl-s"],[147,148,"pl-s"],[148,153,"pl-c1"],[153,154,"pl-s"],[176,177,"pl-s"],[177,198,"pl-c1"],[198,199,"pl-s"],[239,240,"pl-s"],[240,253,"pl-c1"],[253,254,"pl-s"]],[],[[0,51,"pl-mh"],[4,51,"pl-en"]],[],[[23,24,"pl-s"],[24,62,"pl-c1"],[62,63,"pl-s"],[106,107,"pl-s"],[107,108,"pl-s"],[108,158,"pl-c1"],[158,159,"pl-s"],[159,160,"pl-s"],[160,161,"pl-s"],[161,214,"pl-corl"],[214,215,"pl-s"],[229,230,"pl-s"],[230,261,"pl-c1"],[261,262,"pl-s"],[295,296,"pl-s"],[296,297,"pl-s"],[297,315,"pl-c1"],[315,316,"pl-s"],[316,317,"pl-s"],[317,318,"pl-s"],[318,339,"pl-corl"],[339,340,"pl-s"],[347,348,"pl-s"],[348,351,"pl-c1"],[351,352,"pl-s"],[361,362,"pl-s"],[362,363,"pl-s"],[363,395,"pl-c1"],[395,396,"pl-s"],[396,397,"pl-s"],[397,398,"pl-s"],[398,433,"pl-corl"],[433,434,"pl-s"],[453,454,"pl-s"],[454,509,"pl-c1"],[509,510,"pl-s"],[619,620,"pl-s"],[620,632,"pl-c1"],[632,633,"pl-s"],[635,636,"pl-s"],[636,656,"pl-c1"],[656,657,"pl-s"],[663,664,"pl-s"],[664,676,"pl-c1"],[676,677,"pl-s"],[711,712,"pl-s"],[712,721,"pl-c1"],[721,722,"pl-s"],[792,793,"pl-s"],[798,799,"pl-s"],[799,800,"pl-s"],[800,824,"pl-corl"],[824,825,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,44,"pl-c"],[0,1,"pl-c"]],[],[[0,3,"pl-s"]],[],[[44,45,"pl-s"],[45,57,"pl-c1"],[57,58,"pl-s"],[61,62,"pl-s"],[62,82,"pl-c1"],[82,83,"pl-s"],[120,121,"pl-s"],[121,124,"pl-c1"],[124,125,"pl-s"],[137,138,"pl-s"],[138,151,"pl-c1"],[151,152,"pl-s"],[170,171,"pl-s"],[171,177,"pl-c1"],[177,178,"pl-s"]],[],[[0,1,"pl-ml"],[33,34,"pl-ml"],[54,55,"pl-ml"],[115,116,"pl-ml"],[184,185,"pl-ml"]],[[0,1,"pl-ml"],[33,34,"pl-ml"],[54,55,"pl-ml"],[115,116,"pl-ml"],[184,185,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,28,"pl-c1"],[28,29,"pl-s"],[33,34,"pl-ml"],[54,55,"pl-ml"],[56,57,"pl-s"],[57,113,"pl-c1"],[113,114,"pl-s"],[115,116,"pl-ml"],[117,118,"pl-s"],[118,130,"pl-c1"],[130,131,"pl-s"],[184,185,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,29,"pl-c1"],[29,30,"pl-s"],[33,34,"pl-ml"],[54,55,"pl-ml"],[56,57,"pl-s"],[57,113,"pl-c1"],[113,114,"pl-s"],[115,116,"pl-ml"],[117,118,"pl-s"],[118,131,"pl-c1"],[131,132,"pl-s"],[184,185,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,28,"pl-c1"],[28,29,"pl-s"],[33,34,"pl-ml"],[54,55,"pl-ml"],[56,57,"pl-s"],[57,113,"pl-c1"],[113,114,"pl-s"],[115,116,"pl-ml"],[117,118,"pl-s"],[118,130,"pl-c1"],[130,131,"pl-s"],[184,185,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,25,"pl-c1"],[25,26,"pl-s"],[33,34,"pl-ml"],[54,55,"pl-ml"],[115,116,"pl-ml"],[160,161,"pl-s"],[161,181,"pl-c1"],[181,182,"pl-s"],[184,185,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,31,"pl-c1"],[31,32,"pl-s"],[33,34,"pl-ml"],[54,55,"pl-ml"],[67,68,"pl-s"],[68,85,"pl-c1"],[85,86,"pl-s"],[115,116,"pl-ml"],[128,129,"pl-s"],[129,149,"pl-c1"],[149,150,"pl-s"],[184,185,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,32,"pl-c1"],[32,33,"pl-s"],[33,34,"pl-ml"],[54,55,"pl-ml"],[67,68,"pl-s"],[68,85,"pl-c1"],[85,86,"pl-s"],[115,116,"pl-ml"],[128,129,"pl-s"],[129,149,"pl-c1"],[149,150,"pl-s"],[184,185,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,31,"pl-c1"],[31,32,"pl-s"],[33,34,"pl-ml"],[54,55,"pl-ml"],[67,68,"pl-s"],[68,85,"pl-c1"],[85,86,"pl-s"],[115,116,"pl-ml"],[151,152,"pl-s"],[152,171,"pl-c1"],[171,172,"pl-s"],[184,185,"pl-ml"]],[],[[0,1,"pl-s"],[1,13,"pl-c1"],[13,14,"pl-s"],[27,28,"pl-s"],[28,73,"pl-c1"],[73,74,"pl-s"]],[],[[58,59,"pl-s"],[59,115,"pl-c1"],[115,116,"pl-s"]],[],[[0,2,"pl-s"],[56,58,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,53,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[25,29,"pl-smi"]],[[0,6,"pl-k"],[28,32,"pl-smi"]],[],[[0,3,"pl-s"]],[],[[0,2,"pl-s"],[57,59,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,78,"pl-c"],[0,1,"pl-c"]],[[0,78,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[25,29,"pl-smi"]],[[0,6,"pl-k"],[28,32,"pl-smi"]],[],[[0,3,"pl-s"]],[],[[0,2,"pl-s"],[56,58,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,78,"pl-c"],[0,1,"pl-c"]],[[0,72,"pl-c"],[0,1,"pl-c"]],[[0,49,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[25,29,"pl-smi"]],[],[[0,3,"pl-s"]],[],[[0,28,"pl-mh"],[5,28,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,52,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"]],[[0,6,"pl-k"]],[[0,6,"pl-k"]],[],[[0,3,"pl-s"]],[],[[116,117,"pl-s"],[117,137,"pl-c1"],[137,138,"pl-s"],[183,184,"pl-s"],[184,195,"pl-c1"],[195,196,"pl-s"],[199,200,"pl-s"],[200,202,"pl-c1"],[202,203,"pl-s"],[255,256,"pl-s"],[256,266,"pl-c1"],[266,267,"pl-s"],[277,278,"pl-s"],[278,292,"pl-c1"],[292,293,"pl-s"],[298,299,"pl-s"],[299,320,"pl-c1"],[320,321,"pl-s"]],[],[[0,28,"pl-mh"],[4,28,"pl-en"],[18,19,"pl-s"],[19,27,"pl-c1"],[27,28,"pl-s"]],[],[[56,57,"pl-s"],[57,65,"pl-c1"],[65,66,"pl-s"],[117,119,"pl-s"],[123,124,"pl-s"],[124,132,"pl-c1"],[132,133,"pl-s"],[156,157,"pl-s"],[157,169,"pl-c1"],[169,170,"pl-s"],[173,174,"pl-s"],[174,194,"pl-c1"],[194,195,"pl-s"],[198,199,"pl-s"],[199,211,"pl-c1"],[211,212,"pl-s"],[218,219,"pl-s"],[219,228,"pl-c1"],[228,229,"pl-s"],[229,231,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[29,30,"pl-s"],[30,42,"pl-c1"],[42,43,"pl-s"],[57,58,"pl-s"],[58,88,"pl-c1"],[88,89,"pl-s"],[92,93,"pl-s"],[93,115,"pl-c1"],[115,116,"pl-s"],[131,132,"pl-s"],[132,154,"pl-c1"],[154,155,"pl-s"],[158,159,"pl-s"],[159,185,"pl-c1"],[185,186,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"],[29,30,"pl-s"],[30,52,"pl-c1"],[52,53,"pl-s"],[93,94,"pl-s"],[94,150,"pl-c1"],[150,151,"pl-s"]],[],[],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[37,38,"pl-s"],[38,46,"pl-c1"],[46,47,"pl-s"],[47,49,"pl-s"],[85,86,"pl-s"],[86,98,"pl-c1"],[98,99,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[26,28,"pl-s"],[36,37,"pl-s"],[37,75,"pl-c1"],[75,76,"pl-s"],[93,94,"pl-s"],[94,124,"pl-c1"],[124,125,"pl-s"],[128,129,"pl-s"],[129,151,"pl-c1"],[151,152,"pl-s"],[326,327,"pl-s"],[327,339,"pl-c1"],[339,340,"pl-s"]],[],[[49,50,"pl-s"],[50,64,"pl-c1"],[64,65,"pl-s"],[70,71,"pl-s"],[71,80,"pl-c1"],[80,81,"pl-s"],[101,102,"pl-s"],[102,106,"pl-c1"],[106,107,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,73,"pl-c"],[0,1,"pl-c"]],[[0,78,"pl-c"],[0,1,"pl-c"]],[[0,73,"pl-c"],[0,1,"pl-c"]],[[10,57,"pl-s"],[10,11,"pl-pds"],[56,57,"pl-pds"]],[],[[0,63,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[20,97,"pl-s"],[20,21,"pl-pds"],[21,25,"pl-smi"],[96,97,"pl-pds"]],[[0,6,"pl-k"],[28,68,"pl-s"],[28,29,"pl-pds"],[29,33,"pl-smi"],[67,68,"pl-pds"]],[[0,6,"pl-k"],[20,72,"pl-s"],[20,21,"pl-pds"],[21,25,"pl-smi"],[71,72,"pl-pds"]],[],[],[],[[15,25,"pl-smi"]],[[0,3,"pl-s"]],[],[[56,57,"pl-s"],[57,77,"pl-c1"],[77,78,"pl-s"],[92,93,"pl-s"],[93,114,"pl-c1"],[114,115,"pl-s"],[132,133,"pl-s"],[133,182,"pl-c1"],[182,183,"pl-s"],[189,190,"pl-s"],[197,198,"pl-s"],[198,199,"pl-s"],[199,207,"pl-corl"],[207,208,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[19,20,"pl-s"],[20,69,"pl-c1"],[69,70,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,15,"pl-c1"],[15,16,"pl-s"],[18,19,"pl-s"],[19,29,"pl-c1"],[29,30,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,20,"pl-c1"],[20,21,"pl-s"],[23,24,"pl-s"],[24,36,"pl-c1"],[36,37,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,16,"pl-c1"],[16,17,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,29,"pl-c1"],[29,30,"pl-s"],[99,100,"pl-s"],[100,114,"pl-c1"],[114,115,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,20,"pl-c1"],[20,21,"pl-s"],[50,51,"pl-s"],[51,73,"pl-c1"],[73,74,"pl-s"],[113,114,"pl-s"],[114,129,"pl-c1"],[129,130,"pl-s"]],[[8,9,"pl-s"],[9,10,"pl-v"],[11,12,"pl-s"],[12,18,"pl-c1"],[18,19,"pl-s"],[44,45,"pl-s"],[45,52,"pl-c1"],[52,53,"pl-s"]],[[8,9,"pl-s"],[9,10,"pl-v"],[11,12,"pl-s"],[12,18,"pl-c1"],[18,19,"pl-s"]],[[8,9,"pl-s"],[9,10,"pl-v"],[11,12,"pl-s"],[12,22,"pl-c1"],[22,23,"pl-s"]],[[8,9,"pl-s"],[9,10,"pl-v"],[11,12,"pl-s"],[12,20,"pl-c1"],[20,21,"pl-s"],[53,54,"pl-s"],[54,63,"pl-c1"],[63,64,"pl-s"],[86,87,"pl-s"],[87,100,"pl-c1"],[100,101,"pl-s"]],[[8,9,"pl-s"],[9,10,"pl-v"],[11,12,"pl-s"],[12,23,"pl-c1"],[23,24,"pl-s"],[59,60,"pl-s"],[60,72,"pl-c1"],[72,73,"pl-s"],[121,122,"pl-s"],[122,133,"pl-c1"],[133,134,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,20,"pl-c1"],[20,21,"pl-s"],[85,86,"pl-s"],[86,100,"pl-c1"],[100,101,"pl-s"],[103,104,"pl-s"],[104,121,"pl-c1"],[121,122,"pl-s"],[124,125,"pl-s"],[125,138,"pl-c1"],[138,139,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,10,"pl-c1"],[10,11,"pl-s"],[13,14,"pl-s"],[14,26,"pl-c1"],[26,27,"pl-s"],[65,66,"pl-s"],[66,82,"pl-c1"],[82,83,"pl-s"],[87,88,"pl-s"],[88,94,"pl-c1"],[94,95,"pl-s"],[99,100,"pl-s"],[100,107,"pl-c1"],[107,108,"pl-s"]],[],[[14,15,"pl-s"],[15,23,"pl-c1"],[23,24,"pl-s"],[65,66,"pl-s"],[66,114,"pl-c1"],[114,115,"pl-s"],[135,136,"pl-s"],[136,172,"pl-c1"],[172,173,"pl-s"],[182,183,"pl-s"],[183,198,"pl-c1"],[198,199,"pl-s"],[208,209,"pl-s"],[209,217,"pl-c1"],[217,218,"pl-s"],[222,223,"pl-s"],[223,264,"pl-c1"],[264,265,"pl-s"]],[],[[0,29,"pl-mh"],[3,29,"pl-en"]],[],[[4,5,"pl-s"],[5,29,"pl-c1"],[29,30,"pl-s"],[60,61,"pl-s"],[61,79,"pl-c1"],[79,80,"pl-s"]],[],[[15,16,"pl-s"],[16,43,"pl-c1"],[43,44,"pl-s"]],[[0,1,"pl-s"],[1,16,"pl-c1"],[16,17,"pl-s"]],[[0,1,"pl-s"],[1,6,"pl-c1"],[6,7,"pl-s"],[19,20,"pl-s"],[20,28,"pl-c1"],[28,29,"pl-s"],[31,32,"pl-s"],[32,38,"pl-c1"],[38,39,"pl-s"],[50,51,"pl-s"],[51,60,"pl-c1"],[60,61,"pl-s"],[67,68,"pl-s"],[68,76,"pl-c1"],[76,77,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,9,"pl-ent"]],[],[[6,16,"pl-ent"],[18,28,"pl-s"],[18,19,"pl-pds"],[27,28,"pl-pds"]],[[6,16,"pl-ent"],[18,42,"pl-s"],[18,19,"pl-pds"],[41,42,"pl-pds"]],[[6,14,"pl-ent"],[16,35,"pl-s"],[16,17,"pl-pds"],[34,35,"pl-pds"]],[[6,17,"pl-ent"],[19,60,"pl-s"],[19,20,"pl-pds"],[59,60,"pl-pds"]],[],[],[],[[0,3,"pl-s"]],[],[],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,6,"pl-k"]],[[0,6,"pl-k"],[38,88,"pl-s"],[38,39,"pl-pds"],[87,88,"pl-pds"]],[[0,6,"pl-k"]],[[0,6,"pl-k"]],[[0,6,"pl-k"]],[[0,6,"pl-k"]],[[0,6,"pl-k"]],[],[],[],[],[[0,3,"pl-s"]],[],[],[[49,50,"pl-s"],[50,60,"pl-c1"],[60,61,"pl-s"]],[],[],[[21,22,"pl-s"],[22,32,"pl-c1"],[32,33,"pl-s"]],[[35,36,"pl-s"],[36,44,"pl-c1"],[44,45,"pl-s"]],[],[[35,36,"pl-s"],[36,41,"pl-c1"],[41,42,"pl-s"],[46,47,"pl-s"],[47,50,"pl-c1"],[50,51,"pl-s"],[61,62,"pl-s"],[62,69,"pl-c1"],[69,70,"pl-s"]],[],[[0,1,"pl-ml"],[39,40,"pl-ml"],[108,109,"pl-ml"],[157,158,"pl-ml"]],[[0,1,"pl-ml"],[39,40,"pl-ml"],[108,109,"pl-ml"],[157,158,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,37,"pl-c1"],[37,38,"pl-s"],[39,40,"pl-ml"],[41,42,"pl-s"],[42,48,"pl-c1"],[48,49,"pl-s"],[51,52,"pl-s"],[52,57,"pl-c1"],[57,58,"pl-s"],[63,64,"pl-s"],[64,70,"pl-c1"],[70,71,"pl-s"],[108,109,"pl-ml"],[110,111,"pl-s"],[111,117,"pl-c1"],[117,118,"pl-s"],[133,134,"pl-s"],[134,140,"pl-c1"],[140,141,"pl-s"],[157,158,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,37,"pl-c1"],[37,38,"pl-s"],[39,40,"pl-ml"],[108,109,"pl-ml"],[110,111,"pl-s"],[111,112,"pl-c1"],[112,113,"pl-s"],[157,158,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,37,"pl-c1"],[37,38,"pl-s"],[39,40,"pl-ml"],[108,109,"pl-ml"],[110,111,"pl-s"],[111,112,"pl-c1"],[112,113,"pl-s"],[157,158,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,29,"pl-c1"],[29,30,"pl-s"],[39,40,"pl-ml"],[108,109,"pl-ml"],[157,158,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,29,"pl-c1"],[29,30,"pl-s"],[39,40,"pl-ml"],[108,109,"pl-ml"],[157,158,"pl-ml"]],[],[[0,1,"pl-s"],[1,7,"pl-c1"],[7,8,"pl-s"],[43,44,"pl-s"],[44,49,"pl-c1"],[49,50,"pl-s"]],[[0,1,"pl-s"],[1,43,"pl-c1"],[43,44,"pl-s"]],[[30,31,"pl-s"],[31,37,"pl-c1"],[37,38,"pl-s"]],[],[],[],[[20,21,"pl-s"],[21,22,"pl-c1"],[22,23,"pl-s"],[32,33,"pl-s"],[33,34,"pl-c1"],[34,35,"pl-s"],[47,48,"pl-s"],[48,49,"pl-c1"],[49,50,"pl-s"]],[[21,22,"pl-s"],[22,23,"pl-c1"],[23,24,"pl-s"],[62,63,"pl-s"],[63,64,"pl-c1"],[64,65,"pl-s"]],[],[],[],[],[],[],[],[],[],[[0,1,"pl-s"],[1,39,"pl-c1"],[39,40,"pl-s"]],[],[],[[0,48,"pl-mh"],[3,48,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[8,31,"pl-smi"],[32,33,"pl-k"],[40,41,"pl-k"],[42,43,"pl-k"],[48,49,"pl-k"],[50,51,"pl-k"],[55,56,"pl-k"]],[],[[16,65,"pl-s"],[16,18,"pl-pds"],[22,30,"pl-smi"],[64,65,"pl-pds"]],[[16,24,"pl-smi"],[37,53,"pl-smi"]],[],[],[[20,36,"pl-smi"]],[[16,24,"pl-smi"]],[[5,13,"pl-smi"]],[[0,3,"pl-s"]],[],[[33,34,"pl-s"],[34,48,"pl-c1"],[48,49,"pl-s"],[69,70,"pl-s"],[79,80,"pl-s"],[80,81,"pl-s"],[81,103,"pl-corl"],[103,104,"pl-s"],[125,126,"pl-s"],[126,158,"pl-c1"],[158,159,"pl-s"]],[],[[0,37,"pl-mh"],[4,37,"pl-en"]],[],[[82,83,"pl-s"],[83,95,"pl-c1"],[95,96,"pl-s"],[135,136,"pl-s"],[136,166,"pl-c1"],[166,167,"pl-s"],[253,255,"pl-s"],[269,271,"pl-s"],[331,332,"pl-s"],[352,353,"pl-s"],[353,354,"pl-s"],[354,377,"pl-corl"],[377,378,"pl-s"],[381,382,"pl-s"],[382,402,"pl-c1"],[402,403,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,74,"pl-c"],[0,1,"pl-c"]],[[0,77,"pl-c"],[0,1,"pl-c"]],[],[[20,36,"pl-smi"]],[[16,24,"pl-smi"]],[],[[5,13,"pl-smi"]],[],[[0,66,"pl-c"],[0,1,"pl-c"]],[[0,55,"pl-c"],[0,1,"pl-c"]],[],[[20,36,"pl-smi"]],[[16,24,"pl-smi"]],[],[[5,13,"pl-smi"]],[],[[0,75,"pl-c"],[0,1,"pl-c"]],[[0,70,"pl-c"],[0,1,"pl-c"]],[],[[20,36,"pl-smi"]],[[16,24,"pl-smi"]],[],[[5,13,"pl-smi"]],[[0,3,"pl-s"]],[],[[0,23,"pl-mh"],[3,23,"pl-en"]],[],[[82,83,"pl-s"],[83,95,"pl-c1"],[95,96,"pl-s"],[98,99,"pl-s"],[99,103,"pl-c1"],[103,104,"pl-s"],[106,107,"pl-s"],[107,117,"pl-c1"],[117,118,"pl-s"],[120,121,"pl-s"],[121,136,"pl-c1"],[136,137,"pl-s"],[139,140,"pl-s"],[140,156,"pl-c1"],[156,157,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[],[[20,28,"pl-smi"]],[[5,13,"pl-smi"]],[[0,3,"pl-s"]],[],[[64,65,"pl-s"],[65,77,"pl-c1"],[77,78,"pl-s"],[152,153,"pl-s"],[153,171,"pl-c1"],[171,172,"pl-s"],[192,193,"pl-s"],[193,202,"pl-c1"],[202,203,"pl-s"],[217,218,"pl-s"],[227,228,"pl-s"],[228,229,"pl-s"],[229,251,"pl-corl"],[251,252,"pl-s"],[257,258,"pl-s"],[258,294,"pl-c1"],[294,295,"pl-s"]],[],[[60,61,"pl-s"],[61,75,"pl-c1"],[75,76,"pl-s"],[107,108,"pl-s"],[108,123,"pl-c1"],[123,124,"pl-s"],[153,154,"pl-s"],[154,175,"pl-c1"],[175,176,"pl-s"]],[],[[0,9,"pl-mh"],[3,9,"pl-en"]],[],[[54,55,"pl-s"],[55,56,"pl-s"],[56,75,"pl-c1"],[75,76,"pl-s"],[76,77,"pl-s"],[77,78,"pl-s"],[78,131,"pl-corl"],[131,132,"pl-s"],[235,236,"pl-s"],[236,251,"pl-c1"],[251,252,"pl-s"],[277,278,"pl-s"],[278,292,"pl-c1"],[292,293,"pl-s"],[358,359,"pl-s"],[359,373,"pl-c1"],[373,374,"pl-s"],[407,408,"pl-s"],[408,428,"pl-c1"],[428,429,"pl-s"],[431,432,"pl-s"],[432,454,"pl-c1"],[454,455,"pl-s"],[461,462,"pl-s"],[462,474,"pl-c1"],[474,475,"pl-s"],[477,478,"pl-s"],[478,504,"pl-c1"],[504,505,"pl-s"],[508,509,"pl-s"],[509,521,"pl-c1"],[521,522,"pl-s"],[586,587,"pl-s"],[587,643,"pl-c1"],[643,644,"pl-s"]],[],[[107,108,"pl-s"],[108,113,"pl-c1"],[113,114,"pl-s"],[217,218,"pl-s"],[254,255,"pl-s"],[255,256,"pl-s"],[256,271,"pl-corl"],[271,272,"pl-s"]],[],[],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,9,"pl-c1"],[9,10,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,12,"pl-c1"],[12,13,"pl-s"],[16,17,"pl-s"],[17,22,"pl-c1"],[22,23,"pl-s"],[47,48,"pl-s"],[48,53,"pl-c1"],[53,54,"pl-s"],[100,101,"pl-s"],[101,140,"pl-c1"],[140,141,"pl-s"],[145,146,"pl-s"],[146,161,"pl-c1"],[161,162,"pl-s"],[176,177,"pl-s"],[177,188,"pl-c1"],[188,189,"pl-s"],[193,194,"pl-s"],[194,215,"pl-c1"],[215,216,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,18,"pl-c1"],[18,19,"pl-s"],[59,60,"pl-s"],[60,75,"pl-c1"],[75,76,"pl-s"],[111,112,"pl-s"],[112,157,"pl-c1"],[157,158,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,15,"pl-c1"],[15,16,"pl-s"],[18,19,"pl-s"],[19,24,"pl-c1"],[24,25,"pl-s"],[27,28,"pl-s"],[28,32,"pl-c1"],[32,33,"pl-s"],[69,70,"pl-s"],[70,119,"pl-c1"],[119,120,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,18,"pl-c1"],[18,19,"pl-s"],[22,23,"pl-s"],[23,31,"pl-c1"],[31,32,"pl-s"],[47,48,"pl-s"],[48,61,"pl-c1"],[61,62,"pl-s"],[77,78,"pl-s"],[78,87,"pl-c1"],[87,88,"pl-s"],[120,121,"pl-s"],[121,131,"pl-c1"],[131,132,"pl-s"],[138,139,"pl-s"],[139,149,"pl-c1"],[149,150,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,11,"pl-c1"],[11,12,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,36,"pl-c1"],[36,37,"pl-s"],[66,67,"pl-s"],[67,69,"pl-c1"],[69,70,"pl-s"],[108,109,"pl-s"],[109,132,"pl-c1"],[132,133,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,33,"pl-c1"],[33,34,"pl-s"],[59,60,"pl-s"],[60,69,"pl-c1"],[69,70,"pl-s"],[73,74,"pl-s"],[74,85,"pl-c1"],[85,86,"pl-s"],[98,99,"pl-s"],[99,105,"pl-c1"],[105,106,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,27,"pl-c1"],[27,28,"pl-s"],[51,52,"pl-s"],[52,60,"pl-c1"],[60,61,"pl-s"],[64,65,"pl-s"],[65,84,"pl-c1"],[84,85,"pl-s"],[88,89,"pl-s"],[89,95,"pl-c1"],[95,96,"pl-s"],[99,100,"pl-s"],[100,107,"pl-c1"],[107,108,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,20,"pl-c1"],[20,21,"pl-s"],[23,24,"pl-s"],[24,33,"pl-c1"],[33,34,"pl-s"],[36,37,"pl-s"],[37,47,"pl-c1"],[47,48,"pl-s"],[50,51,"pl-s"],[51,70,"pl-c1"],[70,71,"pl-s"],[166,167,"pl-s"],[167,185,"pl-c1"],[185,186,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,15,"pl-c1"],[15,16,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,15,"pl-c1"],[15,16,"pl-s"],[18,19,"pl-s"],[19,23,"pl-c1"],[23,24,"pl-s"],[26,27,"pl-s"],[27,42,"pl-c1"],[42,43,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,23,"pl-c1"],[23,24,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,34,"pl-c1"],[34,35,"pl-s"],[57,58,"pl-s"],[58,149,"pl-c1"],[149,150,"pl-s"],[162,163,"pl-s"],[163,173,"pl-c1"],[173,174,"pl-s"],[176,177,"pl-s"],[177,179,"pl-c1"],[179,180,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,38,"pl-c1"],[38,39,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,37,"pl-c1"],[37,38,"pl-s"],[72,73,"pl-s"],[73,75,"pl-c1"],[75,76,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,33,"pl-c1"],[33,34,"pl-s"],[90,91,"pl-s"],[91,92,"pl-c1"],[92,93,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,25,"pl-c1"],[25,26,"pl-s"],[77,78,"pl-s"],[78,87,"pl-c1"],[87,88,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,19,"pl-c1"],[19,20,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,15,"pl-c1"],[15,16,"pl-s"],[26,27,"pl-s"],[27,40,"pl-c1"],[40,41,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,23,"pl-c1"],[23,24,"pl-s"],[85,86,"pl-s"],[86,90,"pl-c1"],[90,91,"pl-s"],[155,156,"pl-s"],[156,161,"pl-c1"],[161,162,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,11,"pl-c1"],[11,12,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,17,"pl-c1"],[17,18,"pl-s"],[57,58,"pl-s"],[58,68,"pl-c1"],[68,69,"pl-s"],[72,73,"pl-s"],[73,82,"pl-c1"],[82,83,"pl-s"],[86,87,"pl-s"],[87,96,"pl-c1"],[96,97,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,36,"pl-c1"],[36,37,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,12,"pl-c1"],[12,13,"pl-s"],[16,17,"pl-s"],[17,23,"pl-c1"],[23,24,"pl-s"],[27,28,"pl-s"],[28,39,"pl-c1"],[39,40,"pl-s"],[66,67,"pl-s"],[67,73,"pl-c1"],[73,74,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,22,"pl-c1"],[22,23,"pl-s"],[69,70,"pl-s"],[70,86,"pl-c1"],[86,87,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,26,"pl-c1"],[26,27,"pl-s"],[29,30,"pl-s"],[30,47,"pl-c1"],[47,48,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,21,"pl-c1"],[21,22,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,16,"pl-c1"],[16,17,"pl-s"],[31,32,"pl-s"],[32,36,"pl-c1"],[36,37,"pl-s"],[61,62,"pl-s"],[62,86,"pl-c1"],[86,87,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,15,"pl-c1"],[15,16,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,10,"pl-c1"],[10,11,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,13,"pl-c1"],[13,14,"pl-s"],[16,17,"pl-s"],[17,20,"pl-c1"],[20,21,"pl-s"],[23,24,"pl-s"],[24,29,"pl-c1"],[29,30,"pl-s"],[32,33,"pl-s"],[33,45,"pl-c1"],[45,46,"pl-s"],[71,72,"pl-s"],[72,75,"pl-c1"],[75,76,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,22,"pl-c1"],[22,23,"pl-s"],[99,100,"pl-s"],[100,109,"pl-c1"],[109,110,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,30,"pl-c1"],[30,31,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[23,24,"pl-s"],[24,50,"pl-c1"],[50,51,"pl-s"],[180,181,"pl-s"],[181,183,"pl-c1"],[183,184,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,15,"pl-c1"],[15,16,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,21,"pl-c1"],[21,22,"pl-s"],[24,25,"pl-s"],[25,38,"pl-c1"],[38,39,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,13,"pl-c1"],[13,14,"pl-s"],[16,17,"pl-s"],[17,22,"pl-c1"],[22,23,"pl-s"],[25,26,"pl-s"],[26,33,"pl-c1"],[33,34,"pl-s"],[89,90,"pl-s"],[90,102,"pl-c1"],[102,103,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,26,"pl-c1"],[26,27,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,13,"pl-c1"],[13,14,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,16,"pl-c1"],[16,17,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,23,"pl-c1"],[23,24,"pl-s"],[86,87,"pl-s"],[87,132,"pl-c1"],[132,133,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,20,"pl-c1"],[20,21,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,31,"pl-c1"],[31,32,"pl-s"],[35,36,"pl-s"],[36,42,"pl-c1"],[42,43,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,41,"pl-c1"],[41,42,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,15,"pl-c1"],[15,16,"pl-s"],[18,19,"pl-s"],[19,43,"pl-c1"],[43,44,"pl-s"],[46,47,"pl-s"],[47,65,"pl-c1"],[65,66,"pl-s"],[74,75,"pl-s"],[75,88,"pl-c1"],[88,89,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,33,"pl-c1"],[33,34,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,17,"pl-c1"],[17,18,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,20,"pl-c1"],[20,21,"pl-s"],[65,66,"pl-s"],[66,70,"pl-c1"],[70,71,"pl-s"],[80,81,"pl-s"],[81,86,"pl-c1"],[86,87,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,16,"pl-c1"],[16,17,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,17,"pl-c1"],[17,18,"pl-s"],[99,100,"pl-s"],[100,121,"pl-c1"],[121,122,"pl-s"],[142,143,"pl-s"],[143,175,"pl-c1"],[175,176,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,17,"pl-c1"],[17,18,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,28,"pl-c1"],[28,29,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,22,"pl-c1"],[22,23,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,29,"pl-c1"],[29,30,"pl-s"],[73,74,"pl-s"],[74,88,"pl-c1"],[88,89,"pl-s"],[110,111,"pl-s"],[111,115,"pl-c1"],[115,116,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,27,"pl-c1"],[27,28,"pl-s"],[74,75,"pl-s"],[75,85,"pl-c1"],[85,86,"pl-s"]],[[4,5,"pl-s"],[5,6,"pl-v"],[7,8,"pl-s"],[8,12,"pl-c1"],[12,13,"pl-s"]],[],[[0,31,"pl-mh"],[4,31,"pl-en"]],[],[[76,77,"pl-s"],[77,91,"pl-c1"],[91,92,"pl-s"],[111,112,"pl-s"],[112,114,"pl-c1"],[114,115,"pl-s"],[121,122,"pl-s"],[122,152,"pl-c1"],[152,153,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,42,"pl-c1"],[42,43,"pl-s"],[79,80,"pl-s"],[80,105,"pl-c1"],[105,106,"pl-s"],[117,118,"pl-s"],[118,140,"pl-c1"],[140,141,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,26,"pl-c1"],[26,27,"pl-s"],[73,74,"pl-s"],[74,110,"pl-c1"],[110,111,"pl-s"],[122,123,"pl-s"],[123,145,"pl-c1"],[145,146,"pl-s"]],[],[[29,30,"pl-s"],[30,48,"pl-c1"],[48,49,"pl-s"],[70,71,"pl-s"],[71,96,"pl-c1"],[96,97,"pl-s"],[108,109,"pl-s"],[109,120,"pl-c1"],[120,121,"pl-s"]]],"colorizedLines":null}},"title":"cosmos-framework/docs/training.md at main · NVIDIA/cosmos-framework","appPayload":{},"meta":{"title":"cosmos-framework/docs/training.md at main · NVIDIA/cosmos-framework"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/NVIDIA/cosmos-framework" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B SidePanel__RGvnRQ HiddenSidePanel__B93C-7" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="sidebar__UTbGEu" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop Pane__nWEixw HideTree__atYFw- HidePane__uwpyMP" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="content__cw9d2I" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container Box__Mgy-fH"><div class="StickyHeader__WXzXSk" id="StickyHeader"><div class="Box_1__lNQXUt"><div class="Box_2__2Iyod3"><div class="react-code-view-header-wrap--narrow Box_3__FRi-lt"><div class="treeToggleWrapper__9kKsad"><h2 class="Heading__GnjjJL prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk Button_1__F8O5Sv" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative expandButton__x9VQso filesButtonBreakpoint__9AmeQg fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorOverlayBtn__KrS-QJ" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorOverlayContainer__do_QsK"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorBtnTextContainer__U9K7hH"><span class="RefSelectorText__DKi677">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow Box_5__XARjQx"><div class="container__3CaSnu lg__W8GBuN"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="nav__om3y2l"><h2 class="sr-only userSelectNone__I6NSfK prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="list__l5DBAB"><li class="listItem__z6CNRy"><a class="repoLink__Uax2bT prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/NVIDIA/cosmos-framework/tree/main" data-discover="true">cosmos-framework</a></li><li class="listItem__z6CNRy"><span class="separator__FWRrWr lg__W8GBuN" aria-hidden="true">/</span><a class="directoryLink__pFe5bB prc-Link-Link-9ZwDx" data-component="Link" href="/NVIDIA/cosmos-framework/tree/main/docs" data-discover="true">docs</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="filename__e-5cWV"><span class="separator__FWRrWr lg__W8GBuN" aria-hidden="true">/</span><h1 class="filenameHeading__MTKryR lg__W8GBuN prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">training.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="tooltip__XwO6MO prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="Box_7__UInhGV"><div class="d-flex gap-2"><div><div class="FileResultsList__Sho6qi"><span class="d-flex FilesSearchBox__bU3lGO TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_1cpla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_1cpla9lik5_ _R_1cpla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_1cpla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk Button__iESaGa" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click IconButton__TllxCn prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7p9la9lik5_" id="_R_99la9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7p9la9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="Box_7__UInhGV"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk Button__iESaGa" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click IconButton__TllxCn prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7pdla9lik5_" id="_R_9dla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7pdla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="contentWrapper__h3vMmh"><div class="react-code-view-bottom-padding"><div class="Box__nP_d2G"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="Box__B2eZet"><h2 class="sr-only userSelectNone__I6NSfK prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only userSelectNone__I6NSfK prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/NVIDIA/cosmos-framework/commits/main/docs/training.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex linkButton__rBg5F1 flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/NVIDIA/cosmos-framework/commits/main/docs/training.md" class="prc-Button-ButtonBase-9n-Xk linkButton__rBg5F1 flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container blobContainer__ds2DJS"><div class="react-code-size-details-banner codeSizeDetails__TwyI5R"><div class="react-code-size-details-banner Box__wO1jqt"><div class="text-mono Box_1__NgV1zw"><div data-testid="blob-size" class="Truncate_1__fzkDk_ prc-Truncate-Truncate-2G1eo" data-inline="true" title="36.8 KB" style="--truncate-max-width:100%"><span>560 lines (422 loc) · 36.8 KB</span></div></div></div></div><div class="react-blob-view-header-sticky stickyHeader__iOrrW6" id="repos-sticky-header"><div class="Box__pIkMkv"><div class="react-blob-sticky-header"><div class="outerWrapper__jQuXcV outerWrapperHidden__yN223M"><div class="Box_1__Lq7d9C"><div class="Box_2__LXYgfX"><div class="Box_3__1P_GZT"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorOverlayBtn__KrS-QJ" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorOverlayContainer__do_QsK"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorBtnTextContainer__U9K7hH"><span class="RefSelectorText__DKi677">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="Box_4__gQ9URQ"><div class="container__3CaSnu md__EChwKv"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="nav__om3y2l"><h2 class="sr-only userSelectNone__I6NSfK prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="list__l5DBAB"><li class="listItem__z6CNRy"><a class="repoLink__Uax2bT prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/NVIDIA/cosmos-framework/tree/main" data-discover="true">cosmos-framework</a></li><li class="listItem__z6CNRy"><span class="separator__FWRrWr md__EChwKv" aria-hidden="true">/</span><a class="directoryLink__pFe5bB prc-Link-Link-9ZwDx" data-component="Link" href="/NVIDIA/cosmos-framework/tree/main/docs" data-discover="true">docs</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="filename__e-5cWV"><span class="separator__FWRrWr md__EChwKv" aria-hidden="true">/</span><h1 class="filenameHeading__MTKryR md__EChwKv prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">training.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="tooltip__XwO6MO prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk Button__x4ALLb GoToTopButton__NTXwOZ" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="Box_1__1bJV7g"><h2 class="sr-only userSelectNone__I6NSfK prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="Box_2__Is-e-Y"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp SegmentedControl__GioqBZ" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header Box__wO1jqt"><div class="text-mono Box_1__NgV1zw"><div data-testid="blob-size" class="Truncate_1__fzkDk_ prc-Truncate-Truncate-2G1eo" data-inline="true" title="36.8 KB" style="--truncate-max-width:100%"><span>560 lines (422 loc) · 36.8 KB</span></div></div></div></div><div class="Box_3__OE5Y7F"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions Box_4__C-NqPq"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/NVIDIA/cosmos-framework/raw/refs/heads/main/docs/training.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk linkButton__rBg5F1 LinkButton___5BTHO" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk downloadButton__gSQP8w prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 IconButton__fFTwBu prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click IconButton__0qsoRg prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="blobContentWrapper__Nr-ksB"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="blobContentSection__g1-z7P blobContentSectionMarkdown__5cydiO" style="margin-top:46px"><div class="js-snippet-clipboard-copy-unpositioned markdownBlob__6s-Qd9" data-hpc="true" containertiming="hpc"><article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">Post-Training (Supervised Fine-Tuning)</h1><a id="user-content-post-training-supervised-fine-tuning" class="anchor" aria-label="Permalink: Post-Training (Supervised Fine-Tuning)" href="#post-training-supervised-fine-tuning"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>

<hr>
<p dir="auto"><strong>Table of Contents</strong></p>
<ul dir="auto">
<li><a href="#step-1---prepare-data-and-config">Step 1 - Prepare data and config</a></li>
<li><a href="#step-2--prepare-checkpoint">Step 2 — Prepare checkpoint</a></li>
<li><a href="#step-3--run-training">Step 3 — Run training</a>
<ul dir="auto">
<li><a href="#option-a-recommended-the-paired-launch-shell">Option A (recommended): the paired launch shell</a>
<ul dir="auto">
<li><a href="#overriding-the-defaults">Overriding the defaults</a></li>
</ul>
</li>
<li><a href="#option-b-raw-torchrun">Option B: raw <code>torchrun</code></a></li>
</ul>
</li>
<li><a href="#outputs">Outputs</a></li>
<li><a href="#hybrid-video-reasoning-sft">Hybrid video reasoning SFT</a></li>
<li><a href="#export-checkpoint-to-hugging-face-safetensors">Export checkpoint to Hugging Face safetensors</a>
<ul dir="auto">
<li><a href="#vit--vision-tower-cosmos3-edge">ViT / vision tower (Cosmos3-Edge)</a></li>
</ul>
</li>
<li><a href="#convert-to-diffusers">Convert to Diffusers</a></li>
<li><a href="#config">Config</a>
<ul dir="auto">
<li><a href="#common-hydra-tail-overrides">Common Hydra tail overrides</a></li>
</ul>
</li>
</ul>
<hr>

<p dir="auto">Fine-tune a pre-trained Cosmos3 model on your own dataset using supervised fine-tuning (SFT). Tested on 8× H100 (80 GB).</p>
<p dir="auto">Prerequisites:</p>
<ul dir="auto">
<li><a href="/NVIDIA/cosmos-framework/blob/main/README.md#setup">Setup</a></li>
<li><a href="/NVIDIA/cosmos-framework/blob/main/docs/environment_variables.md">Environment Variables</a></li>
<li><a href="/NVIDIA/cosmos-framework/blob/main/docs/faq.md">FAQ</a> — troubleshooting (OOM during SFT, defaults), common pitfalls.</li>
</ul>
<p dir="auto">The runnable artifacts (TOML recipes, paired launch shells, inference helpers) live in <a href="/NVIDIA/cosmos-framework/blob/main/examples/README.md"><code>examples/</code></a>.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Step 1 - Prepare data and config</h2><a id="user-content-step-1---prepare-data-and-config" class="anchor" aria-label="Permalink: Step 1 - Prepare data and config" href="#step-1---prepare-data-and-config"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Some datasets are license gated — visit the repository page and accept any terms, and authenticate with <code>uvx hf@latest auth login</code> (or set <code>HF_TOKEN</code>).</p>
<p dir="auto">The per-recipe download commands below write to <code>examples/data/&lt;dataset&gt;/</code> and <code>examples/checkpoints/wan22_vae/Wan2.2_VAE.pth</code>, which match the launcher's default <code>$DATASET_PATH</code> and <code>$WAN_VAE_PATH</code>. See <a href="#option-a-recommended-the-paired-launch-shell">Step 3 → Option A</a> for how to override these defaults if you'd rather keep data on a different filesystem.</p>
<p dir="auto">Select one of the following recipes:</p>
<details open=""><summary><b>Vision SFT (Cosmos3-Nano)</b></summary>
<p dir="auto">T2V/I2V/V2V SFT on <a href="https://huggingface.co/datasets/nvidia/BridgeData2-Subset-Synthetic-Captions/tree/main" rel="nofollow">nvidia/BridgeData2-Subset-Synthetic-Captions</a>. <code>$DATASET_PATH</code> should be the directory containing <code>train/video_dataset_file.jsonl</code>. Each clip carries a structured-JSON caption (<code>caption_json</code>) — the model's native prompt format — which the SFT loader trains on by default (the dense narrative is kept as a backup), so training stays aligned with <a href="/NVIDIA/cosmos-framework/blob/main/docs/dataset_jsonl.md#inference">Inference</a>; see <a href="/NVIDIA/cosmos-framework/blob/main/docs/dataset_jsonl.md#format">JSONL Dataset → Format</a>.</p>
<p dir="auto">Launch shell: <code>examples/launch_sft_vision_nano.sh</code></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="BASE_CHECKPOINT_NAME=Cosmos3-Nano

# Defaults match the launcher (see Step 3 → Option A to override).
uvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \
    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \
    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet
uvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \
    --local-dir examples/checkpoints/wan22_vae --quiet"><pre>BASE_CHECKPOINT_NAME=Cosmos3-Nano

<span class="pl-c"><span class="pl-c">#</span> Defaults match the launcher (see Step 3 → Option A to override).</span>
uvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \
    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \
    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet
uvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \
    --local-dir examples/checkpoints/wan22_vae --quiet</pre></div>
</details>
<details><summary><b>Vision SFT LoRA (Cosmos3-Super)</b></summary>
<p dir="auto">LoRA SFT on Qwen3-VL-32B MoT (Cosmos3-Super), on the same Bridge dataset as <strong>Vision SFT (Cosmos3-Nano)</strong>. Step 2 must convert the Cosmos3-Super checkpoint, not Cosmos3-Nano.</p>
<p dir="auto">Launch shell: <code>examples/launch_sft_vision_super.sh</code></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="BASE_CHECKPOINT_NAME=Cosmos3-Super

# Defaults match the launcher (see Step 3 → Option A to override).
uvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \
    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \
    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet
uvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \
    --local-dir examples/checkpoints/wan22_vae --quiet"><pre>BASE_CHECKPOINT_NAME=Cosmos3-Super

<span class="pl-c"><span class="pl-c">#</span> Defaults match the launcher (see Step 3 → Option A to override).</span>
uvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \
    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \
    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet
uvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \
    --local-dir examples/checkpoints/wan22_vae --quiet</pre></div>
</details>
<details><summary><b>Vision SFT (Cosmos3-Edge)</b></summary>
<p dir="auto">Full fine-tune of the Nemotron-2B-Dense-VL backbone (Cosmos3-Edge), on the same Bridge dataset as <strong>Vision SFT (Cosmos3-Nano)</strong>. Step 2 must convert the Cosmos3-Edge checkpoint, not Cosmos3-Nano.</p>
<p dir="auto">Launch shell: <code>examples/launch_sft_vision_edge.sh</code></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="BASE_CHECKPOINT_NAME=Cosmos3-Edge

# Defaults match the launcher (see Step 3 → Option A to override).
uvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \
    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \
    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet
uvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \
    --local-dir examples/checkpoints/wan22_vae --quiet"><pre>BASE_CHECKPOINT_NAME=Cosmos3-Edge

<span class="pl-c"><span class="pl-c">#</span> Defaults match the launcher (see Step 3 → Option A to override).</span>
uvx hf@latest download --repo-type dataset nvidia/BridgeData2-Subset-Synthetic-Captions \
    --revision 40d018ac1c1a2a4b9734f17fdb21f3d933c49a01 \
    --local-dir examples/data/BridgeData2-Subset-Synthetic-Captions --quiet
uvx hf@latest download Wan-AI/Wan2.2-TI2V-5B Wan2.2_VAE.pth \
    --local-dir examples/checkpoints/wan22_vae --quiet</pre></div>
</details>
<details><summary><b>Reasoner Alignment SFT with LLaVA-OneVision (vfm-vlm)</b></summary>
<p dir="auto">Alignment SFT for the Reasoner variant on the <a href="https://huggingface.co/datasets/lmms-lab/LLaVA-OneVision-Data" rel="nofollow">lmms-lab/LLaVA-OneVision-Data</a> dataset (streamed from HF Hub). Skips Step 2: by default the backbone <code>Qwen/Qwen3-VL-8B-Instruct</code> is fetched from the HF Hub by the model downloader at startup — no DCP conversion needed and no required env vars. To instead start from a merged Cosmos3 reasoner snapshot (Cosmos3-Nano LM merged onto the Qwen3-VL visual tower), build it with <code>convert_model_to_vlm_safetensors</code> (see <a href="#step-2--prepare-checkpoint">Step 2</a>) and point <code>VLM_SAFETENSORS_PATH</code> at it — same mechanism as the VideoPhy-2 recipe below.</p>
<p dir="auto">Launch shell: <code>examples/launch_sft_llava_ov.sh</code></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# No required env vars. The first launch will populate the HF Hub cache under
# $HF_HOME (defaults to /tmp/hf_cache inside the wrapper); subsequent launches
# reuse the cached snapshot.
#
# (optional) HF_TOKEN raises HF Hub rate limits for the streamed dataset
# revision lookup — useful if you're running 8-rank fan-out from a single IP:
# export HF_TOKEN=hf_...
#
# (optional) VLM_SAFETENSORS_PATH starts training from a local pre-converted
# Qwen3-VL safetensors snapshot (e.g. Cosmos3-Nano LM merged with the Qwen3-VL
# visual tower) instead of the public HF backbone:
# export VLM_SAFETENSORS_PATH=$PWD/examples/checkpoints/Cosmos3-Nano-VLM"><pre><span class="pl-c"><span class="pl-c">#</span> No required env vars. The first launch will populate the HF Hub cache under</span>
<span class="pl-c"><span class="pl-c">#</span> $HF_HOME (defaults to /tmp/hf_cache inside the wrapper); subsequent launches</span>
<span class="pl-c"><span class="pl-c">#</span> reuse the cached snapshot.</span>
<span class="pl-c"><span class="pl-c">#</span></span>
<span class="pl-c"><span class="pl-c">#</span> (optional) HF_TOKEN raises HF Hub rate limits for the streamed dataset</span>
<span class="pl-c"><span class="pl-c">#</span> revision lookup — useful if you're running 8-rank fan-out from a single IP:</span>
<span class="pl-c"><span class="pl-c">#</span> export HF_TOKEN=hf_...</span>
<span class="pl-c"><span class="pl-c">#</span></span>
<span class="pl-c"><span class="pl-c">#</span> (optional) VLM_SAFETENSORS_PATH starts training from a local pre-converted</span>
<span class="pl-c"><span class="pl-c">#</span> Qwen3-VL safetensors snapshot (e.g. Cosmos3-Nano LM merged with the Qwen3-VL</span>
<span class="pl-c"><span class="pl-c">#</span> visual tower) instead of the public HF backbone:</span>
<span class="pl-c"><span class="pl-c">#</span> export VLM_SAFETENSORS_PATH=$PWD/examples/checkpoints/Cosmos3-Nano-VLM</span></pre></div>
</details>
<details><summary><b>Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Nano)</b></summary>
<p dir="auto">Reasoner alignment SFT for 1–5 physical-plausibility scoring on <a href="https://huggingface.co/datasets/videophysics/videophy2_train" rel="nofollow">videophysics/videophy2_train</a> (HF test split renamed to <code>videophy2_val/</code>). <code>[job].task = "vlm"</code>. Bootstraps from <code>Cosmos3-Nano</code>'s language-model weights merged onto the public Qwen3-VL-8B-Instruct visual tower; the merged HF directory is consumed via <code>[model.backbone].safetensors_path</code> (plumbed by <code>VLM_SAFETENSORS_PATH</code>).</p>
<p dir="auto">Launch shell: <code>examples/launch_sft_videophy2_nano.sh</code></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Step 1 (data): materialize the public HF dataset into the canonical local layout
# (videophy2_{train,val}/{meta.json, media/, text/}).
python -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \
    --out_root examples/data/videophysics --split both"><pre><span class="pl-c"><span class="pl-c">#</span> Step 1 (data): materialize the public HF dataset into the canonical local layout</span>
<span class="pl-c"><span class="pl-c">#</span> (videophy2_{train,val}/{meta.json, media/, text/}).</span>
python -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \
    --out_root examples/data/videophysics --split both</pre></div>
</details>
<details><summary><b>Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Super)</b></summary>
<p dir="auto">Super-tier counterpart of the VideoPhy-2 recipe above: same 1–5 physical-plausibility scoring on <a href="https://huggingface.co/datasets/videophysics/videophy2_train" rel="nofollow">videophysics/videophy2_train</a>, but a full fine-tune of the 32B backbone. <code>[job].task = "vlm"</code>. Bootstraps from <code>Cosmos3-Super</code>'s language-model weights merged onto the public Qwen3-VL-32B-Instruct visual tower; the merged HF directory is consumed via <code>[model.backbone].safetensors_path</code> (plumbed by <code>VLM_SAFETENSORS_PATH</code>). Full-shard FSDP across all ranks, so it runs on a 4-GPU (e.g. GB200x4) or 8-GPU allocation.</p>
<p dir="auto">Launch shell: <code>examples/launch_sft_videophy2_super.sh</code></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Step 1 (data): same as the nano recipe — materialize the public HF dataset into
# the canonical local layout (videophy2_{train,val}/{meta.json, media/, text/}).
python -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \
    --out_root examples/data/videophysics --split both"><pre><span class="pl-c"><span class="pl-c">#</span> Step 1 (data): same as the nano recipe — materialize the public HF dataset into</span>
<span class="pl-c"><span class="pl-c">#</span> the canonical local layout (videophy2_{train,val}/{meta.json, media/, text/}).</span>
python -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \
    --out_root examples/data/videophysics --split both</pre></div>
</details>
<details><summary><b>Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Edge)</b></summary>
<p dir="auto">Edge-tier counterpart of the VideoPhy-2 recipe above: same 1–5 physical-plausibility scoring on <a href="https://huggingface.co/datasets/videophysics/videophy2_train" rel="nofollow">videophysics/videophy2_train</a>, but on the compact <strong>Nemotron-2B-Dense-VL</strong> reasoner (SigLIP2 vision tower, <code>model_type = "cosmos3_edge"</code> — native HF metadata, no remote code; the model classes are registered in-framework) instead of Qwen3-VL. <code>[job].task = "vlm"</code>. The vision tower is frozen; the projector + LM train at a uniform LR. <code>[model.backbone].model_name</code> is the <strong>public, ungated</strong> omni release <code>nvidia/Cosmos3-Edge</code>, which supplies the arch/config/tokenizer <strong>and</strong> the reasoner weights: the training loader follows the snapshot's root safetensors index into its weight shards, so weights load directly from the download — no conversion step and no required weights env var. Like the nano/super recipes, <code>VLM_SAFETENSORS_PATH</code> is an optional override for loading from a local safetensors directory instead. The reasoner weights shipped inside <code>nvidia/Cosmos3-Edge</code> are the canonical Edge reasoner weights — there is no separate reasoner repo to download. Only 2B, so it runs on a 4-GPU (e.g. GB200x4) or 8-GPU allocation.</p>
<p dir="auto">Launch shell: <code>examples/launch_sft_videophy2_edge.sh</code></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Step 1 (data): same as the nano recipe — materialize the public HF dataset into
# the canonical local layout (videophy2_{train,val}/{meta.json, media/, text/}).
python -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \
    --out_root examples/data/videophysics --split both"><pre><span class="pl-c"><span class="pl-c">#</span> Step 1 (data): same as the nano recipe — materialize the public HF dataset into</span>
<span class="pl-c"><span class="pl-c">#</span> the canonical local layout (videophy2_{train,val}/{meta.json, media/, text/}).</span>
python -m cosmos_framework.scripts.reasoner.prepare_videophy2_from_hf \
    --out_root examples/data/videophysics --split both</pre></div>
</details>
<details><summary><b>Action-Policy Post-Training (DROID / LIBERO)</b></summary>
<p dir="auto">Robot action-policy recipes: DROID (<code>joint_pos</code> 8-D actions + proprioceptive state) and
LIBERO (<code>frame_wise_relative</code> rot6d 10-D actions), both from Cosmos3-Nano. They follow the same Step 2/Step 3 flow below, with their own data staging
(DROID keep-ranges window filter, LIBERO suite selection), and are documented separately:</p>
<ul dir="auto">
<li><a href="/NVIDIA/cosmos-framework/blob/main/docs/action_policy_droid_posttrain.md">DROID action policy</a> —
<code>examples/launch_sft_action_policy_droid_nano.sh</code></li>
<li><a href="/NVIDIA/cosmos-framework/blob/main/docs/action_policy_libero_posttrain.md">LIBERO action policy</a> —
<code>examples/launch_sft_action_policy_libero_10_nano.sh</code> / <code>examples/launch_sft_action_policy_libero_all_nano.sh</code></li>
</ul>
</details>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Step 2 — Prepare checkpoint</h2><a id="user-content-step-2--prepare-checkpoint" class="anchor" aria-label="Permalink: Step 2 — Prepare checkpoint" href="#step-2--prepare-checkpoint"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Convert the base checkpoint to <a href="https://pytorch.org/docs/stable/distributed.checkpoint.html" rel="nofollow">PyTorch Distributed Checkpoint (DCP)</a> format. <code>cosmos_framework.scripts.convert_model_to_dcp</code> ships in the unified <code>cosmos_framework/</code> package, so this step runs from the repo root (with the environment activated per <a href="/NVIDIA/cosmos-framework/blob/main/docs/setup.md">Setup</a>).</p>
<p dir="auto">Set <code>BASE_CHECKPOINT_NAME</code> to the value from the recipe block you picked in Step 1 (<code>Cosmos3-Nano</code>, <code>Cosmos3-Super</code>, or <code>Cosmos3-Edge</code>):</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="BASE_CHECKPOINT_NAME=Cosmos3-Nano   # or Cosmos3-Super / Cosmos3-Edge — match the recipe in Step 1

# Default output dir matches the launcher (see Step 3 → Option A to override).
python -m cosmos_framework.scripts.convert_model_to_dcp \
  -o examples/checkpoints/$BASE_CHECKPOINT_NAME \
  --checkpoint-path $BASE_CHECKPOINT_NAME"><pre>BASE_CHECKPOINT_NAME=Cosmos3-Nano   <span class="pl-c"><span class="pl-c">#</span> or Cosmos3-Super / Cosmos3-Edge — match the recipe in Step 1</span>

<span class="pl-c"><span class="pl-c">#</span> Default output dir matches the launcher (see Step 3 → Option A to override).</span>
python -m cosmos_framework.scripts.convert_model_to_dcp \
  -o examples/checkpoints/<span class="pl-smi">$BASE_CHECKPOINT_NAME</span> \
  --checkpoint-path <span class="pl-smi">$BASE_CHECKPOINT_NAME</span></pre></div>
<p dir="auto"><code>$BASE_CHECKPOINT_NAME</code> (e.g. <code>Cosmos3-Nano</code>, <code>Cosmos3-Super</code>, <code>Cosmos3-Edge</code>) is a registered name in the checkpoint catalog; the converter downloads the matching repo from the Hugging Face Hub and writes the DCP into <code>examples/checkpoints/$BASE_CHECKPOINT_NAME</code>.</p>
<p dir="auto"><strong>Reasoner Alignment SFT with LLaVA-OneVision (vfm-vlm):</strong> Skip this step — the Reasoner alignment SFT loads <code>Qwen/Qwen3-VL-8B-Instruct</code> from the HF Hub at startup (no DCP conversion required). To start from a merged Cosmos3 reasoner snapshot instead, build one with <code>convert_model_to_vlm_safetensors</code> (see the VideoPhy-2 note below) and pass it via <code>VLM_SAFETENSORS_PATH</code>.</p>
<p dir="auto"><strong>Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Nano):</strong> Use <code>cosmos_framework.scripts.convert_model_to_vlm_safetensors</code> instead.</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Step 2 (VLM checkpoint): merge Cosmos3-Nano LM onto the Qwen3-VL visual tower.
# Replaces the convert_model_to_dcp step used by the VFM recipes above.
python -m cosmos_framework.scripts.convert_model_to_vlm_safetensors \
    --checkpoint-path Cosmos3-Nano \
    -o examples/checkpoints/Cosmos3-Nano-VLM"><pre><span class="pl-c"><span class="pl-c">#</span> Step 2 (VLM checkpoint): merge Cosmos3-Nano LM onto the Qwen3-VL visual tower.</span>
<span class="pl-c"><span class="pl-c">#</span> Replaces the convert_model_to_dcp step used by the VFM recipes above.</span>
python -m cosmos_framework.scripts.convert_model_to_vlm_safetensors \
    --checkpoint-path Cosmos3-Nano \
    -o examples/checkpoints/Cosmos3-Nano-VLM</pre></div>
<p dir="auto"><strong>Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Super):</strong> Same converter, but merge the <code>Cosmos3-Super</code> LM onto the <strong>32B</strong> Qwen3-VL visual tower via <code>--vlm-model-name Qwen/Qwen3-VL-32B-Instruct</code>.</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Step 2 (Super VLM checkpoint): merge Cosmos3-Super LM onto the Qwen3-VL-32B visual tower.
python -m cosmos_framework.scripts.convert_model_to_vlm_safetensors \
    --checkpoint-path Cosmos3-Super \
    --vlm-model-name Qwen/Qwen3-VL-32B-Instruct \
    -o examples/checkpoints/Cosmos3-Super-VLM"><pre><span class="pl-c"><span class="pl-c">#</span> Step 2 (Super VLM checkpoint): merge Cosmos3-Super LM onto the Qwen3-VL-32B visual tower.</span>
python -m cosmos_framework.scripts.convert_model_to_vlm_safetensors \
    --checkpoint-path Cosmos3-Super \
    --vlm-model-name Qwen/Qwen3-VL-32B-Instruct \
    -o examples/checkpoints/Cosmos3-Super-VLM</pre></div>
<p dir="auto"><strong>Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Edge):</strong> Skip this step — the recipe loads the reasoner weights directly from the (ungated) <code>nvidia/Cosmos3-Edge</code> snapshot at startup: the training loader follows the repo's root safetensors index into its weight shards, so no conversion or extraction is required. To start from a local safetensors directory instead, point <code>VLM_SAFETENSORS_PATH</code> at it (optional, same mechanism as the nano recipe).</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Step 3 — Run training</h2><a id="user-content-step-3--run-training" class="anchor" aria-label="Permalink: Step 3 — Run training" href="#step-3--run-training"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><strong>Weights &amp; Biases (optional):</strong> training recipes default to <code>job.wandb_mode = "disabled"</code>. To log a run to W&amp;B, set <code>wandb_mode = "online"</code> under <code>[job]</code> in the TOML (or pass <code>job.wandb_mode=online</code> as a command-line override) and export <code>WANDB_API_KEY</code> in your environment before launching.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Option A (recommended): the paired launch shell</h3><a id="user-content-option-a-recommended-the-paired-launch-shell" class="anchor" aria-label="Permalink: Option A (recommended): the paired launch shell" href="#option-a-recommended-the-paired-launch-shell"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Each recipe ships as a <code>examples/toml/sft_config/&lt;recipe&gt;.toml</code> (validated against the pydantic schema at <a href="/NVIDIA/cosmos-framework/blob/main/cosmos_framework/configs/toml_config/sft_config.py"><code>cosmos_framework/configs/toml_config/sft_config.py</code></a>) paired with <code>examples/launch_sft_&lt;recipe&gt;.sh</code>; the full catalog is indexed in <a href="/NVIDIA/cosmos-framework/blob/main/examples/README.md"><code>examples/README.md</code></a>. Each <code>.sh</code> sources <a href="/NVIDIA/cosmos-framework/blob/main/examples/_sft_launcher_common.sh"><code>examples/_sft_launcher_common.sh</code></a> and forwards into <code>cosmos_framework.scripts.train --sft-toml=&lt;recipe-toml&gt;</code>. From the repo root, run the launch shell paired with the recipe you set up in Step 1. The wrapper resolves <code>DATASET_PATH</code>, <code>BASE_CHECKPOINT_PATH</code>, and <code>WAN_VAE_PATH</code> from the default locations under <code>examples/</code> (populated by Step 1 + Step 2), so no env-var setup is required (see <a href="#overriding-the-defaults">below</a> to override):</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# from the repo root, after Step 1 + Step 2:
bash examples/launch_sft_vision_nano.sh"><pre><span class="pl-c"><span class="pl-c">#</span> from the repo root, after Step 1 + Step 2:</span>
bash examples/launch_sft_vision_nano.sh</pre></div>
<p dir="auto">Each launcher's default paths come from the <code>DATASET_PATH</code> + <code>BASE_CHECKPOINT_PATH</code> defaults declared at the top of its <code>.sh</code> (each uses <code>: "${VAR:=…}"</code> so any value you <code>export</code> in the shell before launching wins over the default):</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Launch shell</th>
<th>Post-Training Task</th>
<th>Default $DATASET_PATH (under examples/data/)</th>
<th>Default $BASE_CHECKPOINT_PATH (under examples/checkpoints/)</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>launch_sft_vision_nano.sh</code></td>
<td>Generator SFT</td>
<td><code>BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge</code></td>
<td><code>Cosmos3-Nano</code></td>
</tr>
<tr>
<td><code>launch_sft_vision_super.sh</code></td>
<td>Generator SFT</td>
<td><code>BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge</code></td>
<td><code>Cosmos3-Super</code></td>
</tr>
<tr>
<td><code>launch_sft_vision_edge.sh</code></td>
<td>Generator SFT</td>
<td><code>BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge</code></td>
<td><code>Cosmos3-Edge</code></td>
</tr>
<tr>
<td><code>launch_sft_llava_ov.sh</code></td>
<td>Reasoner SFT</td>
<td>(none; dataset streams from HF Hub)</td>
<td>(none; backbone fetched at startup, or set <code>VLM_SAFETENSORS_PATH</code>)</td>
</tr>
<tr>
<td><code>launch_sft_videophy2_nano.sh</code></td>
<td>Reasoner SFT</td>
<td>(none; set <code>VIDEOPHYSICS_ROOT</code> env)</td>
<td>(none; set <code>VLM_SAFETENSORS_PATH</code> env)</td>
</tr>
<tr>
<td><code>launch_sft_videophy2_super.sh</code></td>
<td>Reasoner SFT</td>
<td>(none; set <code>VIDEOPHYSICS_ROOT</code> env)</td>
<td>(none; set <code>VLM_SAFETENSORS_PATH</code> env — Cosmos3-Super-VLM merge)</td>
</tr>
<tr>
<td><code>launch_sft_videophy2_edge.sh</code></td>
<td>Reasoner SFT</td>
<td>(none; set <code>VIDEOPHYSICS_ROOT</code> env)</td>
<td>(none; weights load directly from <code>nvidia/Cosmos3-Edge</code>)</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto"><code>WAN_VAE_PATH</code> defaults to <code>examples/checkpoints/wan22_vae/Wan2.2_VAE.pth</code> for every non-reasoner recipe.</p>
<p dir="auto">Cosmos3-Edge is only 2B and also fits a 4-GPU node — e.g. <code>NPROC_PER_NODE=4 bash examples/launch_sft_vision_edge.sh</code> (tested on 4×GB200).</p>
<p dir="auto"><strong>Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Nano):</strong></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Step 3 (launch): export both env vars, then launch.
export VIDEOPHYSICS_ROOT=$PWD/examples/data/videophysics
export VLM_SAFETENSORS_PATH=$PWD/examples/checkpoints/Cosmos3-Nano-VLM
bash examples/launch_sft_videophy2_nano.sh"><pre><span class="pl-c"><span class="pl-c">#</span> Step 3 (launch): export both env vars, then launch.</span>
<span class="pl-k">export</span> VIDEOPHYSICS_ROOT=<span class="pl-smi">$PWD</span>/examples/data/videophysics
<span class="pl-k">export</span> VLM_SAFETENSORS_PATH=<span class="pl-smi">$PWD</span>/examples/checkpoints/Cosmos3-Nano-VLM
bash examples/launch_sft_videophy2_nano.sh</pre></div>
<p dir="auto"><strong>Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Super):</strong></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Same as the nano recipe, but point VLM_SAFETENSORS_PATH at the Cosmos3-Super
# merge from Step 2. On a 4-GPU node (e.g. GB200x4) also set NPROC_PER_NODE=4.
export VIDEOPHYSICS_ROOT=$PWD/examples/data/videophysics
export VLM_SAFETENSORS_PATH=$PWD/examples/checkpoints/Cosmos3-Super-VLM
bash examples/launch_sft_videophy2_super.sh"><pre><span class="pl-c"><span class="pl-c">#</span> Same as the nano recipe, but point VLM_SAFETENSORS_PATH at the Cosmos3-Super</span>
<span class="pl-c"><span class="pl-c">#</span> merge from Step 2. On a 4-GPU node (e.g. GB200x4) also set NPROC_PER_NODE=4.</span>
<span class="pl-k">export</span> VIDEOPHYSICS_ROOT=<span class="pl-smi">$PWD</span>/examples/data/videophysics
<span class="pl-k">export</span> VLM_SAFETENSORS_PATH=<span class="pl-smi">$PWD</span>/examples/checkpoints/Cosmos3-Super-VLM
bash examples/launch_sft_videophy2_super.sh</pre></div>
<p dir="auto"><strong>Reasoner Alignment SFT with VideoPhy-2 (Cosmos3-Edge):</strong></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Same as the nano recipe, but no VLM_SAFETENSORS_PATH is needed: the reasoner
# weights load directly from the (ungated) nvidia/Cosmos3-Edge snapshot.
# Only 2B — on a 4-GPU node set NPROC_PER_NODE=4.
export VIDEOPHYSICS_ROOT=$PWD/examples/data/videophysics
bash examples/launch_sft_videophy2_edge.sh"><pre><span class="pl-c"><span class="pl-c">#</span> Same as the nano recipe, but no VLM_SAFETENSORS_PATH is needed: the reasoner</span>
<span class="pl-c"><span class="pl-c">#</span> weights load directly from the (ungated) nvidia/Cosmos3-Edge snapshot.</span>
<span class="pl-c"><span class="pl-c">#</span> Only 2B — on a 4-GPU node set NPROC_PER_NODE=4.</span>
<span class="pl-k">export</span> VIDEOPHYSICS_ROOT=<span class="pl-smi">$PWD</span>/examples/data/videophysics
bash examples/launch_sft_videophy2_edge.sh</pre></div>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Overriding the defaults</h4><a id="user-content-overriding-the-defaults" class="anchor" aria-label="Permalink: Overriding the defaults" href="#overriding-the-defaults"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">If you'd rather put data or checkpoints on a different filesystem (e.g. a faster SSD or shared mount), download to your chosen path in Step 1 / convert the DCP to your chosen path in Step 2, then export the matching env var(s) before launching:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Example: data on /scratch, base DCP on /nfs/ckpts.
export DATASET_PATH=/scratch/BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge
export BASE_CHECKPOINT_PATH=/nfs/ckpts/Cosmos3-Nano
export WAN_VAE_PATH=/nfs/ckpts/wan22_vae/Wan2.2_VAE.pth
bash examples/launch_sft_vision_nano.sh"><pre><span class="pl-c"><span class="pl-c">#</span> Example: data on /scratch, base DCP on /nfs/ckpts.</span>
<span class="pl-k">export</span> DATASET_PATH=/scratch/BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge
<span class="pl-k">export</span> BASE_CHECKPOINT_PATH=/nfs/ckpts/Cosmos3-Nano
<span class="pl-k">export</span> WAN_VAE_PATH=/nfs/ckpts/wan22_vae/Wan2.2_VAE.pth
bash examples/launch_sft_vision_nano.sh</pre></div>
<p dir="auto">Each env var falls back to its default if unset, so you only need to export the ones you're moving. The downloads / <code>convert_model_to_dcp</code> commands in Step 1 + Step 2 just need their <code>--local-dir</code> / <code>-o</code> argument pointed at the same path you export here. <code>.gitignore</code> excludes <code>examples/data/</code> and <code>examples/checkpoints/</code> so the multi-GB downloads aren't tracked when you keep the defaults.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Option B: raw <code>torchrun</code></h3><a id="user-content-option-b-raw-torchrun" class="anchor" aria-label="Permalink: Option B: raw torchrun" href="#option-b-raw-torchrun"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">If you'd rather not use the paired launch shell, invoke <code>torchrun</code> directly with the recipe's TOML. Unlike Option A, <strong>raw <code>torchrun</code> does not auto-resolve <code>DATASET_PATH</code> / <code>BASE_CHECKPOINT_PATH</code> / <code>WAN_VAE_PATH</code> from <code>examples/</code></strong> — they have to come from your shell:</p>
<ul dir="auto">
<li><code>BASE_CHECKPOINT_PATH</code> and <code>WAN_VAE_PATH</code> are read via <code>${oc.env:BASE_CHECKPOINT_PATH}</code> / <code>${oc.env:WAN_VAE_PATH}</code> at the TOML's <code>[checkpoint].load_path</code> / <code>[model.tokenizer].vae_path</code> keys.</li>
<li><code>DATASET_PATH</code> is read via <code>${oc.env:DATASET_PATH}</code> inside the experiment-SKU Python (e.g. <code>cosmos_framework/configs/base/experiment/sft/&lt;recipe&gt;.py</code>), not in the TOML.</li>
</ul>
<p dir="auto">You have two options to fill them in (pick either, not both):</p>
<ol dir="auto">
<li><strong>Export them in the shell before <code>torchrun</code></strong> (whether they point at the default <code>examples/...</code> paths from Step 1+2 or your own overrides) — shown below.</li>
<li><strong>Edit the TOML by hand</strong> — open <code>examples/toml/sft_config/&lt;recipe&gt;.toml</code> and replace the <code>${oc.env:BASE_CHECKPOINT_PATH}</code> / <code>${oc.env:WAN_VAE_PATH}</code> placeholders with literal paths. Useful if you want a self-contained TOML you can hand to a colleague or commit alongside an experiment record. (Hand-editing won't help for <code>DATASET_PATH</code> — that's resolved out of the experiment Python, so you must still export it.)</li>
</ol>
<p dir="auto">Run from the repo root (the directory containing <code>pyproject.toml</code> and <code>examples/</code>); the snippet uses <code>$PWD</code> to absolutize the relative paths.</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# This example uses the vision_sft_nano recipe end-to-end (same recipe as
# Option A). To switch recipes, swap TOML_FILE + DATASET_PATH per the table in
# Option A, and Cosmos3-Nano → Cosmos3-Super on the LoRA / super recipes.
TOML_FILE=&quot;examples/toml/sft_config/vision_sft_nano.toml&quot;

# Match the launcher's defaults — or substitute your own paths.
export DATASET_PATH=&quot;$PWD/examples/data/BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge&quot;
export BASE_CHECKPOINT_PATH=&quot;$PWD/examples/checkpoints/Cosmos3-Nano&quot;
export WAN_VAE_PATH=&quot;$PWD/examples/checkpoints/wan22_vae/Wan2.2_VAE.pth&quot;

IMAGINAIRE_OUTPUT_ROOT=outputs/train PYTHONPATH=. \
torchrun --nproc_per_node=8 -m cosmos_framework.scripts.train \
    --sft-toml=$TOML_FILE"><pre><span class="pl-c"><span class="pl-c">#</span> This example uses the vision_sft_nano recipe end-to-end (same recipe as</span>
<span class="pl-c"><span class="pl-c">#</span> Option A). To switch recipes, swap TOML_FILE + DATASET_PATH per the table in</span>
<span class="pl-c"><span class="pl-c">#</span> Option A, and Cosmos3-Nano → Cosmos3-Super on the LoRA / super recipes.</span>
TOML_FILE=<span class="pl-s"><span class="pl-pds">"</span>examples/toml/sft_config/vision_sft_nano.toml<span class="pl-pds">"</span></span>

<span class="pl-c"><span class="pl-c">#</span> Match the launcher's defaults — or substitute your own paths.</span>
<span class="pl-k">export</span> DATASET_PATH=<span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$PWD</span>/examples/data/BridgeData2-Subset-Synthetic-Captions/sft_dataset_bridge<span class="pl-pds">"</span></span>
<span class="pl-k">export</span> BASE_CHECKPOINT_PATH=<span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$PWD</span>/examples/checkpoints/Cosmos3-Nano<span class="pl-pds">"</span></span>
<span class="pl-k">export</span> WAN_VAE_PATH=<span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$PWD</span>/examples/checkpoints/wan22_vae/Wan2.2_VAE.pth<span class="pl-pds">"</span></span>

IMAGINAIRE_OUTPUT_ROOT=outputs/train PYTHONPATH=. \
torchrun --nproc_per_node=8 -m cosmos_framework.scripts.train \
    --sft-toml=<span class="pl-smi">$TOML_FILE</span></pre></div>
<p dir="auto">To resume from the latest in-progress checkpoint, point <code>BASE_CHECKPOINT_PATH</code> at the run's <code>checkpoints/iter_&lt;N&gt;/</code> directory under <code>$IMAGINAIRE_OUTPUT_ROOT/&lt;project&gt;/&lt;group&gt;/&lt;name&gt;/</code> (see <a href="#outputs">Outputs</a> below for the full layout).</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Outputs</h2><a id="user-content-outputs" class="anchor" aria-label="Permalink: Outputs" href="#outputs"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Outputs land under <code>$IMAGINAIRE_OUTPUT_ROOT/&lt;project&gt;/&lt;group&gt;/&lt;name&gt;/</code>:</p>
<ol dir="auto">
<li><code>config.yaml</code>, <code>config.pkl</code>: Finalized resolved config (YAML for inspection, pickle for re-instantiation).</li>
<li><code>launch_info.yaml</code>, <code>job_env.yaml</code>: Job metadata and captured launch environment.</li>
<li><code>checkpoints/</code>:
<ol dir="auto">
<li><code>latest_checkpoint.txt</code>: Pointer file containing the latest checkpoint directory name (e.g. <code>iter_000000200</code>).</li>
<li><code>iter_&lt;iter&gt;/</code>: DCP checkpoint saved every <code>[train.ckpt].save_freq</code> iterations (zero-padded 9-digit, e.g. <code>iter_000000200/</code>):
<ol dir="auto">
<li><code>model/</code>: model weights (sharded <code>.distcp</code>).</li>
<li><code>optim/</code>: optimizer state.</li>
<li><code>scheduler/</code>: LR scheduler state.</li>
<li><code>trainer/</code>: training state — includes the <code>iteration</code> counter and per-rank <code>rng_state_&lt;i&gt;</code> (numpy + random + torch + torch_cuda).</li>
<li><code>dataloader/</code>: optional per-rank pickle shards (<code>rank_&lt;i&gt;.pkl</code>) — only present for dataloaders that implement <code>has_state()</code>.</li>
</ol>
</li>
</ol>
</li>
<li><code>&lt;callback_name&gt;/</code>: Callback outputs, one directory per registered callback (e.g. <code>DeviceMonitor/</code>, <code>EveryNDrawSample/</code>, <code>norm_monitor/</code>).</li>
<li><code>wandb/</code>, <code>wandb_id.txt</code>: Wandb run files — only present when <code>[job].wandb_mode</code> is <code>online</code> or <code>offline</code>.</li>
</ol>
<p dir="auto">The shorthand <code>$RUN_DIR</code> used in the rest of this page refers to <code>$IMAGINAIRE_OUTPUT_ROOT/&lt;project&gt;/&lt;group&gt;/&lt;name&gt;</code>. For example, with <code>IMAGINAIRE_OUTPUT_ROOT=outputs/train</code> and the <code>vision_sft_nano</code> recipe, <code>$RUN_DIR</code> is <code>outputs/train/cosmos3/sft/vision_sft_nano</code>.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Hybrid video reasoning SFT</h2><a id="user-content-hybrid-video-reasoning-sft" class="anchor" aria-label="Permalink: Hybrid video reasoning SFT" href="#hybrid-video-reasoning-sft"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The <code>video_reasoning_sft.toml</code> recipe accepts existing DAFT <code>tao-vl-reason-v1.0</code>
annotations directly through Framework's native dataset loader. It also accepts
the equivalent <code>cosmos-video-reasoning-v1.0</code> records. No dataset conversion or
<code>nvidia-tao-daft</code> runtime installation is needed. Each JSON object contains an
<code>items</code> array with <code>question</code>, <code>answer</code>, optional <code>reasoning</code>, and <code>video_id</code> fields:</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;items&quot;: [
    {
      &quot;video_id&quot;: &quot;clip.mp4&quot;,
      &quot;question&quot;: &quot;Why does the car stop?&quot;,
      &quot;answer&quot;: &quot;The light is red.&quot;,
      &quot;reasoning&quot;: &quot;The car approaches a red traffic light.&quot;
    }
  ]
}"><pre>{
  <span class="pl-ent">"items"</span>: [
    {
      <span class="pl-ent">"video_id"</span>: <span class="pl-s"><span class="pl-pds">"</span>clip.mp4<span class="pl-pds">"</span></span>,
      <span class="pl-ent">"question"</span>: <span class="pl-s"><span class="pl-pds">"</span>Why does the car stop?<span class="pl-pds">"</span></span>,
      <span class="pl-ent">"answer"</span>: <span class="pl-s"><span class="pl-pds">"</span>The light is red.<span class="pl-pds">"</span></span>,
      <span class="pl-ent">"reasoning"</span>: <span class="pl-s"><span class="pl-pds">"</span>The car approaches a red traffic light.<span class="pl-pds">"</span></span>
    }
  ]
}</pre></div>
<p dir="auto">Set annotation paths independently for training and validation. A single path
or a JSON array of paths is accepted; multiple files are concatenated in order.
For example, with a staged Cosmos3-Nano VLM safetensors checkpoint:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="export VLM_SAFETENSORS_PATH=/checkpoints/cosmos3-nano-vlm
export COSMOS_VIDEO_TRAIN_ANNOTATIONS='[&quot;/data/train-bcq.json&quot;, &quot;/data/train-mcq.json&quot;]'
export COSMOS_VIDEO_VAL_ANNOTATIONS=/data/val.json
export COSMOS_VIDEO_TRAIN_MEDIA_ROOTS=/data/videos
export COSMOS_VIDEO_VAL_MEDIA_ROOTS=/data/videos
export COSMOS_VIDEO_TRAIN_RESPONSE_MODE=hybrid
export COSMOS_VIDEO_VAL_RESPONSE_MODE=answer

torchrun --nproc-per-node=4 -m cosmos_framework.scripts.train \
  --sft-toml=examples/toml/sft_config/video_reasoning_sft.toml \
  -- trainer.seed=42"><pre><span class="pl-k">export</span> VLM_SAFETENSORS_PATH=/checkpoints/cosmos3-nano-vlm
<span class="pl-k">export</span> COSMOS_VIDEO_TRAIN_ANNOTATIONS=<span class="pl-s"><span class="pl-pds">'</span>["/data/train-bcq.json", "/data/train-mcq.json"]<span class="pl-pds">'</span></span>
<span class="pl-k">export</span> COSMOS_VIDEO_VAL_ANNOTATIONS=/data/val.json
<span class="pl-k">export</span> COSMOS_VIDEO_TRAIN_MEDIA_ROOTS=/data/videos
<span class="pl-k">export</span> COSMOS_VIDEO_VAL_MEDIA_ROOTS=/data/videos
<span class="pl-k">export</span> COSMOS_VIDEO_TRAIN_RESPONSE_MODE=hybrid
<span class="pl-k">export</span> COSMOS_VIDEO_VAL_RESPONSE_MODE=answer

torchrun --nproc-per-node=4 -m cosmos_framework.scripts.train \
  --sft-toml=examples/toml/sft_config/video_reasoning_sft.toml \
  -- trainer.seed=42</pre></div>
<p dir="auto">Media roots may be a shared path or a JSON array matching the annotation paths.
When omitted, Framework resolves an annotation's <code>media_root</code> relative to its
JSON directory, or uses that directory if the field is absent. The older
Cosmos-RL DAFT hook uses the annotation directory when no explicit root is given,
ignoring an embedded <code>media_root</code>; supply explicit roots to preserve those paths.
These video recipes do not support <code>image_id</code> records.</p>
<p dir="auto">Each split accepts these settings (<code>TRAIN</code> or <code>VAL</code> replaces <code>{SPLIT}</code>):</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Environment variable</th>
<th>Meaning</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>COSMOS_VIDEO_{SPLIT}_RESPONSE_MODE</code></td>
<td><code>answer</code>, <code>think</code>, or <code>hybrid</code></td>
<td><code>hybrid</code> for training; <code>answer</code> for validation</td>
</tr>
<tr>
<td><code>COSMOS_VIDEO_{SPLIT}_SAMPLE_STRIDE</code></td>
<td>Select every Nth raw item; positive integer</td>
<td><code>1</code></td>
</tr>
<tr>
<td><code>COSMOS_VIDEO_{SPLIT}_SAMPLE_OFFSET</code></td>
<td>Start at this raw index; non-negative integer</td>
<td><code>0</code></td>
</tr>
<tr>
<td><code>COSMOS_VIDEO_{SPLIT}_LIMIT</code></td>
<td>Maximum exposed samples after response expansion; positive integer</td>
<td>Unset (unlimited)</td>
</tr>
<tr>
<td><code>COSMOS_VIDEO_SYSTEM_PROMPT</code></td>
<td>Optional system message for both splits</td>
<td>Empty</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto"><code>answer</code> targets contain the answer alone. <code>think</code> targets contain
<code>&lt;think&gt;\n{reasoning}\n&lt;/think&gt;\n\n{answer}</code>, falling back to the answer if
reasoning is absent or empty. <code>hybrid</code> exposes two targets per selected raw item,
interleaved as answer, think, answer, think, matching the Cosmos-RL DAFT hook.
Stride and offset apply before expansion; the limit applies afterward and may
end on an unpaired answer when odd. An offset past the input produces no samples.
For example, stride <code>2</code>, offset <code>1</code>, and limit <code>3</code> expose the answer and think
targets for raw item <code>1</code>, then the answer target for raw item <code>3</code>.</p>
<p dir="auto">The reasoning processor applies the Qwen3-VL Instruct chat template to preserve
explicit think tags and avoid an injected empty think block. Loss masking trains
assistant tokens, including supplied reasoning, while ignoring prompt tokens.
Framework uses its native TorchCodec video processor and lifecycle/checkpoint
callbacks; this migration preserves the response/sampling contract, not the
Cosmos-RL decoder implementation. Adjust frame/pixel budgets and the smoke
recipe's training schedule for your workload; its fixed optimizer-step budget
does not automatically double in hybrid mode. The Edge experiment is
<code>cosmos_task_aware_video_reasoning_edge</code> and uses the same dataset settings; use
an Edge checkpoint and its corresponding model and token budgets.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Export checkpoint to Hugging Face safetensors</h2><a id="user-content-export-checkpoint-to-hugging-face-safetensors" class="anchor" aria-label="Permalink: Export checkpoint to Hugging Face safetensors" href="#export-checkpoint-to-hugging-face-safetensors"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Export the DCP checkpoint produced in Step 3 to a Hugging Face safetensors checkpoint:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="RUN_DIR=$IMAGINAIRE_OUTPUT_ROOT/&lt;project&gt;/&lt;group&gt;/&lt;name&gt;

CHECKPOINT_ITER=$(cat $RUN_DIR/checkpoints/latest_checkpoint.txt)
CHECKPOINT_PATH=$RUN_DIR/checkpoints/$CHECKPOINT_ITER

python -m cosmos_framework.scripts.export_model \
  --checkpoint-path $CHECKPOINT_PATH \
  --config-file $RUN_DIR/config.yaml \
  -o $RUN_DIR/model"><pre>RUN_DIR=<span class="pl-smi">$IMAGINAIRE_OUTPUT_ROOT</span>/<span class="pl-k">&lt;</span>project<span class="pl-k">&gt;</span>/<span class="pl-k">&lt;</span>group<span class="pl-k">&gt;</span>/<span class="pl-k">&lt;</span>name<span class="pl-k">&gt;</span>

CHECKPOINT_ITER=<span class="pl-s"><span class="pl-pds">$(</span>cat <span class="pl-smi">$RUN_DIR</span>/checkpoints/latest_checkpoint.txt<span class="pl-pds">)</span></span>
CHECKPOINT_PATH=<span class="pl-smi">$RUN_DIR</span>/checkpoints/<span class="pl-smi">$CHECKPOINT_ITER</span>

python -m cosmos_framework.scripts.export_model \
  --checkpoint-path <span class="pl-smi">$CHECKPOINT_PATH</span> \
  --config-file <span class="pl-smi">$RUN_DIR</span>/config.yaml \
  -o <span class="pl-smi">$RUN_DIR</span>/model</pre></div>
<p dir="auto">The exported safetensors land at <code>$RUN_DIR/model</code> and can be used in <a href="/NVIDIA/cosmos-framework/blob/main/README.md#inference">Inference</a> commands by passing <code>--checkpoint-path $RUN_DIR/model</code>.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">ViT / vision tower (Cosmos3-Edge)</h3><a id="user-content-vit--vision-tower-cosmos3-edge" class="anchor" aria-label="Permalink: ViT / vision tower (Cosmos3-Edge)" href="#vit--vision-tower-cosmos3-edge"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The plain export above is all any recipe needs — Edge included. For Cosmos3-Edge, <code>export_model</code> bundles the SigLIP2 vision tower into <code>$RUN_DIR/model/vision_encoder/</code> and the processor/tokenizer files into the export root, so the exported directory is <strong>self-contained</strong>: inference runs from it offline, with no Hub download (see <a href="/NVIDIA/cosmos-framework/blob/main/docs/inference.md#reasoner">Inference → Reasoner</a>). <code>export_manifest.json</code> records where the tower and processor came from. Nano/Super exports bundle their processor files the same way.</p>
<p dir="auto">Optional flags:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# --no-vit: generation-only export (T2V / I2V / V2V / T2I), ~1 GB smaller.
#     Writes include_visual=false so the checkpoint loads cleanly everywhere.
python -m cosmos_framework.scripts.export_model \
  --checkpoint-path $CHECKPOINT_PATH \
  --config-file $RUN_DIR/config.yaml \
  --no-vit \
  -o $RUN_DIR/model

# --vit-checkpoint-path: use a custom tower from a local directory
#     (a snapshot root or a vision_encoder/ directory).
python -m cosmos_framework.scripts.export_model \
  --checkpoint-path $CHECKPOINT_PATH \
  --config-file $RUN_DIR/config.yaml \
  --vit-checkpoint-path /path/to/snapshot \
  -o $RUN_DIR/model

# --verify: smoke-test the export on this node's GPU (tiny reasoner query +
#     tiny generation). A failure exits non-zero but keeps the export.
python -m cosmos_framework.scripts.export_model \
  --checkpoint-path $CHECKPOINT_PATH \
  --config-file $RUN_DIR/config.yaml \
  --verify \
  -o $RUN_DIR/model"><pre><span class="pl-c"><span class="pl-c">#</span> --no-vit: generation-only export (T2V / I2V / V2V / T2I), ~1 GB smaller.</span>
<span class="pl-c"><span class="pl-c">#</span>     Writes include_visual=false so the checkpoint loads cleanly everywhere.</span>
python -m cosmos_framework.scripts.export_model \
  --checkpoint-path <span class="pl-smi">$CHECKPOINT_PATH</span> \
  --config-file <span class="pl-smi">$RUN_DIR</span>/config.yaml \
  --no-vit \
  -o <span class="pl-smi">$RUN_DIR</span>/model

<span class="pl-c"><span class="pl-c">#</span> --vit-checkpoint-path: use a custom tower from a local directory</span>
<span class="pl-c"><span class="pl-c">#</span>     (a snapshot root or a vision_encoder/ directory).</span>
python -m cosmos_framework.scripts.export_model \
  --checkpoint-path <span class="pl-smi">$CHECKPOINT_PATH</span> \
  --config-file <span class="pl-smi">$RUN_DIR</span>/config.yaml \
  --vit-checkpoint-path /path/to/snapshot \
  -o <span class="pl-smi">$RUN_DIR</span>/model

<span class="pl-c"><span class="pl-c">#</span> --verify: smoke-test the export on this node's GPU (tiny reasoner query +</span>
<span class="pl-c"><span class="pl-c">#</span>     tiny generation). A failure exits non-zero but keeps the export.</span>
python -m cosmos_framework.scripts.export_model \
  --checkpoint-path <span class="pl-smi">$CHECKPOINT_PATH</span> \
  --config-file <span class="pl-smi">$RUN_DIR</span>/config.yaml \
  --verify \
  -o <span class="pl-smi">$RUN_DIR</span>/model</pre></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Convert to Diffusers</h2><a id="user-content-convert-to-diffusers" class="anchor" aria-label="Permalink: Convert to Diffusers" href="#convert-to-diffusers"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Convert the Hugging Face export from the previous step into a Diffusers pipeline (<code>transformer/</code>, <code>vae/</code>, <code>scheduler/</code>, <code>text_tokenizer/</code>, <code>model_index.json</code>, …):</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="python -m cosmos_framework.scripts.convert_model_to_diffusers \
  --checkpoint-path $RUN_DIR/model \
  -o $RUN_DIR/diffusers"><pre>python -m cosmos_framework.scripts.convert_model_to_diffusers \
  --checkpoint-path <span class="pl-smi">$RUN_DIR</span>/model \
  -o <span class="pl-smi">$RUN_DIR</span>/diffusers</pre></div>
<p dir="auto">The input is the Hugging Face safetensors directory produced by <code>export_model</code> above — not a raw DCP checkpoint, so run the export first. The result at <code>$RUN_DIR/diffusers</code> can be loaded with <code>diffusers</code> or passed to <a href="/NVIDIA/cosmos-framework/blob/main/README.md#inference">Inference</a> via <code>--checkpoint-path $RUN_DIR/diffusers</code>.</p>
<p dir="auto">A generation-only checkpoint with no reasoner vision tower (<code>include_visual</code> unset) is converted without a <code>vision_encoder/</code> sidecar automatically; pass <code>--skip-vision-encoder</code> to force-skip it even when a tower is present.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Config</h2><a id="user-content-config" class="anchor" aria-label="Permalink: Config" href="#config"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The recipe TOML is parsed against the pydantic schema <a href="/NVIDIA/cosmos-framework/blob/main/cosmos_framework/configs/toml_config/sft_config.py"><code>SFTExperimentConfig</code></a> at load time. Every top-level key listed below maps to a sub-model in that file; unknown keys raise a <code>ValidationError</code> before training starts (<code>extra="forbid"</code> on every sub-model). Values may use OmegaConf env interpolation <code>${oc.env:NAME}</code> — the recipe TOMLs use this for <code>BASE_CHECKPOINT_PATH</code> (<code>[checkpoint].load_path</code>) and <code>WAN_VAE_PATH</code> (<code>[model.tokenizer].vae_path</code>). <code>DATASET_PATH</code> is consumed the same way but inside the experiment-SKU Python (<code>cosmos_framework/configs/base/experiment/sft/&lt;recipe&gt;.py</code>), not in the TOML.</p>
<p dir="auto">For the full field-by-field reference (every section, every default, every VFM/VLM applicability note, the <code>"???"</code> MISSING sentinel, env interpolation, the VFM↔VLM path-remap table, and how to extend the schema), see <a href="/NVIDIA/cosmos-framework/blob/main/docs/sft_config.md">SFT Structured-TOML Config Reference</a>.</p>
<p dir="auto">The commonly tuned knobs:</p>
<ol dir="auto">
<li><code>[job]</code>
<ol dir="auto">
<li><code>task</code> — <code>"vfm"</code> (generator recipes) or <code>"vlm"</code> (Reasoner alignment). Picks the base config: <code>cosmos_framework/configs/base/config.py</code> vs <code>…/vlm/config.py</code>. Also drives <code>PATH_REMAPS</code> in <code>toml_config_helper.py</code>.</li>
<li><code>experiment</code> — Registered experiment SKU name (e.g. <code>vision_sft_nano</code>). Each SKU is a Python file under <code>cosmos_framework/configs/base/experiment/sft/</code> that wires up dataloader, model variant, and recipe-specific defaults.</li>
<li><code>project</code>, <code>group</code>, <code>name</code> — Components of the run output dir <code>$IMAGINAIRE_OUTPUT_ROOT/&lt;project&gt;/&lt;group&gt;/&lt;name&gt;/</code>. Also flow to W&amp;B as the project / group / run name.</li>
<li><code>wandb_mode</code> — <code>"online"</code> (logs to W&amp;B; <code>WANDB_API_KEY</code> must be set), <code>"offline"</code> (logs locally, sync later with <code>wandb sync</code>), or <code>"disabled"</code>.</li>
</ol>
</li>
<li><code>[model]</code>
<ol dir="auto">
<li><code>max_num_tokens_after_packing</code> — VFM token-packing target. <code>-1</code> disables the cap. VFM only; VLM uses <code>data_setting.max_tokens</code> (tail override).</li>
<li><code>joint_attn_implementation</code> — VFM attention layout: <code>"two_way"</code> / <code>"three_way"</code> (NATTEN) / <code>"flex"</code>.</li>
<li><code>attn_implementation</code> — VLM attention impl: <code>"cosmos"</code> / <code>"flash_attention_2"</code> / <code>"sdpa"</code> / <code>"eager"</code>. VLM only.</li>
<li><code>lora_enabled</code>, <code>lora_rank</code>, <code>lora_alpha</code>, <code>lora_target_modules</code> — LoRA adapter knobs for the generation pathway. Used by SUPER-tier recipes; NANO-tier leaves <code>lora_enabled=false</code>. VFM only.</li>
</ol>
</li>
<li><code>[model.ema]</code>
<ol dir="auto">
<li><code>enabled</code>, <code>rate</code>, <code>iteration_shift</code> — Exponential moving average of generation-pathway weights. Full fine-tunes typically enable it; LoRA recipes leave it off.</li>
</ol>
</li>
<li><code>[model.parallelism]</code>
<ol dir="auto">
<li><code>data_parallel_shard_degree</code> — FSDP shard degree. <code>data_parallel_shard_degree × data_parallel_replicate_degree × context_parallel_shard_degree</code> must equal <code>WORLD_SIZE</code>. <code>-1</code> autoselects from torchrun world size.</li>
<li><code>data_parallel_replicate_degree</code> — HSDP replicate degree (outer replicate loop over the shard topology).</li>
<li><code>context_parallel_shard_degree</code> — Context-parallel shard degree. <code>&gt;1</code> splits the sequence dim across ranks (used by super-tier configs: DP=4, CP=2 → 8 GPUs).</li>
<li><code>cfg_parallel_shard_degree</code> — Classifier-free-guidance shard degree. Almost always <code>1</code> for SFT.</li>
<li><code>fsdp_master_dtype</code> — Master parameter / FSDP reduce dtype: typically <code>"float32"</code>.</li>
</ol>
</li>
<li><code>[model.compile]</code>
<ol dir="auto">
<li><code>enabled</code> — Enable <code>torch.compile</code>. Improves speed at the cost of memory.</li>
<li><code>compile_dynamic</code> — Whether to compile with symbolic-shape (dynamic) kernels. <code>True</code> (default) is appropriate for training; AR inference may prefer <code>False</code> for stable shapes.</li>
</ol>
</li>
<li><code>[model]</code>
<ol dir="auto">
<li><code>precision</code> — Compute dtype for forward/backward: <code>"bfloat16"</code> / <code>"float16"</code> / <code>"float32"</code>. Master weights stay fp32 separately.</li>
</ol>
</li>
<li><code>[model.activation_checkpointing]</code>
<ol dir="auto">
<li><code>mode</code> — <code>"none"</code> / <code>"selective"</code> (per-op SAC, MoT-only) / <code>"full"</code> (per-block checkpointing).</li>
<li><code>save_ops_regex</code> — Regex patterns for ops to keep saved under <code>mode="selective"</code>.</li>
<li><code>preserve_rng_state</code>, <code>determinism_check</code> — Recompute determinism plumbing.</li>
</ol>
</li>
<li><code>[model.tokenizer]</code>
<ol dir="auto">
<li><code>vae_path</code> — Wan2.2 VAE <code>.pth</code> path. Recipe TOMLs use <code>"${oc.env:WAN_VAE_PATH}"</code>. VFM only.</li>
</ol>
</li>
<li><code>[optimizer]</code>
<ol dir="auto">
<li><code>lr</code> — Base learning rate.</li>
<li><code>betas</code>, <code>eps</code>, <code>fused</code>, <code>weight_decay</code> — Standard AdamW knobs. <code>eps</code> is VFM-only.</li>
<li><code>keys_to_select</code> — Substring allowlist for trainable params. Empty list = train everything; <code>["lora_"]</code> = adapter-only fine-tune.</li>
</ol>
</li>
<li><code>[optimizer.lr_multipliers]</code>
<ol dir="auto">
<li>Inline table of <code>&lt;substring&gt; = &lt;multiplier&gt;</code> pairs that scale the LR of params whose name contains the substring. The shipped vision recipes leave this empty (Hydra default <code>{}</code> stands).</li>
</ol>
</li>
<li><code>[scheduler]</code>
<ol dir="auto">
<li><code>cycle_lengths</code>, <code>warm_up_steps</code> — Cycle length and warmup duration (lists, one entry per cycle), in optimizer steps.</li>
<li><code>f_max</code>, <code>f_min</code>, <code>f_start</code> — LR multipliers at peak / trough / step-0 (ratios of <code>optimizer.lr</code>).</li>
<li><code>verbosity_interval</code> — Scheduler-side LR log frequency. VFM only.</li>
</ol>
</li>
<li><code>[trainer]</code>
<ol dir="auto">
<li><code>max_iter</code> — Total optimizer steps.</li>
<li><code>grad_accum_iter</code> — Micro-batches per optimizer step. Effective global batch = <code>grad_accum_iter × per-rank batch × world_size</code>.</li>
<li><code>logging_iter</code> — Console / W&amp;B scalar log frequency.</li>
<li><code>distributed_parallelism</code> — <code>"fsdp"</code> is the only supported value.</li>
</ol>
</li>
<li><code>[trainer.callbacks.compile_tokenizer]</code>
<ol dir="auto">
<li><code>enabled</code>, <code>compile_after_iterations</code>, <code>warmup_resolutions</code> — Lazy <code>torch.compile</code> of the VAE tokenizer. VFM only.</li>
</ol>
</li>
<li><code>[trainer.callbacks.grad_clip]</code>
<ol dir="auto">
<li><code>clip_norm</code> — Max global L2 norm of the gradient (steps with larger norm are rescaled).</li>
<li><code>force_finite</code> — Replace NaN/Inf grads with zero (default <code>true</code> on VFM, <code>false</code> on VLM).</li>
</ol>
</li>
<li><code>[checkpoint]</code>
<ol dir="auto">
<li><code>load_path</code> — Base DCP checkpoint directory to resume from (Step 2 output, or a prior run's <code>checkpoints/iter_&lt;N&gt;/</code>). Recipe TOMLs use <code>"${oc.env:BASE_CHECKPOINT_PATH}"</code>.</li>
<li><code>save_iter</code> — Save a new DCP checkpoint every N optimizer steps.</li>
<li><code>keys_to_skip_loading</code> — Substring blocklist applied at load time. Used to mask EMA / LoRA tensors when warm-starting from a checkpoint that doesn't have them yet.</li>
</ol>
</li>
<li><code>[dataloader_train]</code> — Top-level scalars only; the dataloader's class (LazyCall) and pipeline wiring (datasets, packers, …) stay in the experiment Python.
<ol dir="auto">
<li><code>max_samples_per_batch</code> — Per-micro-batch sample cap (remapped to <code>max_batch_size</code> on the VLM packer). <code>null</code> / omitted = no per-count cap.</li>
<li><code>max_sequence_length</code> — Per-packed-sequence token cap (remapped to <code>max_tokens</code> on the VLM packer).</li>
<li><code>seed</code> — Dataloader RNG seed (VFM only).</li>
</ol>
</li>
</ol>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Common Hydra tail overrides</h3><a id="user-content-common-hydra-tail-overrides" class="anchor" aria-label="Permalink: Common Hydra tail overrides" href="#common-hydra-tail-overrides"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">These knobs aren't part of the pydantic schema today; pass them as trailing <code>key.path=value</code> positionals after <code>--</code> (the <code>cosmos_framework.scripts.train</code> flow forwards them through OmegaConf):</p>
<ul dir="auto">
<li><code>model.config.policy.backbone.model_name</code> — VLM backbone HF identifier (e.g. <code>Qwen/Qwen3-VL-8B-Instruct</code>). Used by <code>launch_sft_llava_ov.sh</code>.</li>
<li><code>data_setting.max_tokens</code> — VLM token-packing cap (the VLM analogue of <code>[model].max_num_tokens_after_packing</code>). Used by <code>launch_sft_llava_ov.sh</code>.</li>
</ul>
<p dir="auto">The launchers wire these via <code>TAIL_OVERRIDES=(…)</code>; the helper appends <code>-- "${TAIL_OVERRIDES[@]}"</code> after the <code>--sft-toml=</code> argument.</p>
</article></div><div class="d-none"></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="scrollMarksContainer__STmjRv" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

