wandb 0.16.5__py3-none-any.whl → 0.16.6__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- wandb/__init__.py +1 -1
- wandb/cli/cli.py +5 -2
- wandb/integration/openai/fine_tuning.py +74 -37
- wandb/proto/v3/wandb_internal_pb2.py +192 -192
- wandb/proto/v3/wandb_settings_pb2.py +2 -2
- wandb/proto/v4/wandb_internal_pb2.py +192 -192
- wandb/proto/v4/wandb_settings_pb2.py +2 -2
- wandb/sdk/artifacts/artifact.py +25 -9
- wandb/sdk/artifacts/artifact_saver.py +16 -19
- wandb/sdk/interface/interface.py +18 -6
- wandb/sdk/launch/_launch.py +5 -0
- wandb/sdk/launch/_project_spec.py +5 -20
- wandb/sdk/launch/agent/agent.py +80 -37
- wandb/sdk/launch/agent/config.py +8 -0
- wandb/sdk/launch/builder/kaniko_builder.py +149 -134
- wandb/sdk/launch/create_job.py +43 -48
- wandb/sdk/launch/runner/kubernetes_monitor.py +3 -1
- wandb/sdk/launch/sweeps/scheduler.py +3 -1
- wandb/sdk/launch/utils.py +18 -0
- wandb/sdk/lib/_settings_toposort_generated.py +1 -0
- wandb/sdk/lib/run_moment.py +7 -1
- wandb/sdk/wandb_init.py +2 -8
- wandb/sdk/wandb_run.py +50 -34
- wandb/sdk/wandb_settings.py +2 -0
- {wandb-0.16.5.dist-info → wandb-0.16.6.dist-info}/METADATA +1 -1
- {wandb-0.16.5.dist-info → wandb-0.16.6.dist-info}/RECORD +30 -30
- {wandb-0.16.5.dist-info → wandb-0.16.6.dist-info}/LICENSE +0 -0
- {wandb-0.16.5.dist-info → wandb-0.16.6.dist-info}/WHEEL +0 -0
- {wandb-0.16.5.dist-info → wandb-0.16.6.dist-info}/entry_points.txt +0 -0
- {wandb-0.16.5.dist-info → wandb-0.16.6.dist-info}/top_level.txt +0 -0
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
|
|
14
14
|
from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
|
15
15
|
|
16
16
|
|
17
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n wandb/proto/wandb_settings.proto\x12\x0ewandb_internal\x1a\x1egoogle/protobuf/wrappers.proto\" \n\x0fListStringValue\x12\r\n\x05value\x18\x01 \x03(\t\"\x8a\x01\n\x17MapStringKeyStringValue\x12\x41\n\x05value\x18\x01 \x03(\x0b\x32\x32.wandb_internal.MapStringKeyStringValue.ValueEntry\x1a,\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcb\x01\n#MapStringKeyMapStringKeyStringValue\x12M\n\x05value\x18\x01 \x03(\x0b\x32>.wandb_internal.MapStringKeyMapStringKeyStringValue.ValueEntry\x1aU\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue:\x02\x38\x01\"\x9a\x01\n\x12OpenMetricsFilters\x12\x33\n\x08sequence\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValueH\x00\x12\x46\n\x07mapping\x18\x02 \x01(\x0b\x32\x33.wandb_internal.MapStringKeyMapStringKeyStringValueH\x00\x42\x07\n\x05value\"7\n\tRunMoment\x12\x0b\n\x03run\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x0e\n\x06metric\x18\x03 \x01(\t\"\xc9\x44\n\x08Settings\x12-\n\x07\x61pi_key\x18\x37 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06run_id\x18k \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07run_url\x18q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07project\x18\x61 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x65ntity\x18\x45 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07log_dir\x18U \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0clog_internal\x18V \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfiles_dir\x18\x46 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x05_args\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12/\n\x0b_aws_lambda\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x44\n\x1f_async_upload_concurrency_limit\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x32\n\x0e_cli_only_mode\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06_colab\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x05_cuda\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\r_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10_disable_service\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15_disable_setproctitle\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0e_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0f_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\x0c_except_exit\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\x0b_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x44\n\x13_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12\x42\n\x1c_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x38\n\x14_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x16_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x17_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12=\n\x17_internal_queue_timeout\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08_ipython\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_jupyter\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\r_jupyter_root\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07_kaggle\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x16_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\n_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0f_network_buffer\x18\x1b \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12)\n\x05_noop\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\t_notebook\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x05_sync\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x03_os\x18 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x11_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\r_require_core\x18$ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x36\n\x12_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_service_wait\x18\' \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f_start_datetime\x18( \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0b_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12/\n\n_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12@\n\x1a_stats_sample_rate_seconds\x18+ \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x19_stats_samples_to_average\x18, \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x12_stats_join_assets\x18- \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12G\n!_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12N\n\x1d_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12G\n\x1b_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_tracelog\x18\x32 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\r_unsaved_keys\x18\x33 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12,\n\x08_windows\x18\x34 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10\x61llow_val_change\x18\x35 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\tanonymous\x18\x36 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12P\n\x1f\x61zure_account_url_to_access_key\x18\x38 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12.\n\x08\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08\x63ode_dir\x18: \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0c\x63onfig_paths\x18; \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12-\n\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\ndeployment\x18= \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\x0c\x64isable_code\x18> \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x14\x64isable_job_creation\x18\x41 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08\x64isabled\x18\x42 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06\x64ocker\x18\x43 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05\x65mail\x18\x44 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05\x66orce\x18G \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\ngit_commit\x18H \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\ngit_remote\x18I \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0egit_remote_url\x18J \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08git_root\x18K \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11heartbeat_seconds\x18L \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12*\n\x04host\x18M \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x32\n\x0cinit_timeout\x18O \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08is_local\x18P \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\njob_source\x18Q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\rlabel_disable\x18R \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06launch\x18S \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12launch_config_path\x18T \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x14log_symlink_internal\x18W \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10log_symlink_user\x18X \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08log_user\x18Y \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rlogin_timeout\x18Z \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12*\n\x04mode\x18\\ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rnotebook_name\x18] \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07problem\x18^ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07program\x18_ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0fprogram_relpath\x18` \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0bproject_url\x18\x62 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05quiet\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06reinit\x18\x64 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07relogin\x18\x65 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06resume\x18\x66 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cresume_fname\x18g \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07resumed\x18h \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tfork_from\x18\xa4\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12.\n\x08root_dir\x18i \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_group\x18j \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0crun_job_type\x18l \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_mode\x18m \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_name\x18n \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_notes\x18o \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x08run_tags\x18p \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x35\n\x11sagemaker_disable\x18r \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tsave_code\x18s \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x0fsettings_system\x18t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12settings_workspace\x18u \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bshow_colors\x18v \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\nshow_emoji\x18w \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0bshow_errors\x18x \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tshow_info\x18y \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rshow_warnings\x18z \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06silent\x18{ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cstart_method\x18| \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x06strict\x18} \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0esummary_errors\x18~ \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0fsummary_timeout\x18\x7f \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x10summary_warnings\x18\x80\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\x08sweep_id\x18\x81\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10sweep_param_path\x18\x82\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tsweep_url\x18\x83\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07symlink\x18\x84\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08sync_dir\x18\x85\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tsync_file\x18\x86\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13sync_symlink_latest\x18\x87\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rsystem_sample\x18\x88\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x15system_sample_seconds\x18\x89\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12J\n%table_raise_on_max_row_limit_exceeded\x18\x8a\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08timespec\x18\x8b\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x07tmp_dir\x18\x8c\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08username\x18\x8d\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\twandb_dir\x18\x8e\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\r_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\r_jupyter_path\x18\x90\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08job_name\x18\x91\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x11_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12<\n\x16_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12J\n#_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12J\n#_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x18_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12L\n%_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12L\n%_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x1e_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x38\n\x12_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1f_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1f_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12?\n\x18_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12:\n\x15_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12,\n\x07_shared\x18\xa2\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x08_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValueb\x06proto3')
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n wandb/proto/wandb_settings.proto\x12\x0ewandb_internal\x1a\x1egoogle/protobuf/wrappers.proto\" \n\x0fListStringValue\x12\r\n\x05value\x18\x01 \x03(\t\"\x8a\x01\n\x17MapStringKeyStringValue\x12\x41\n\x05value\x18\x01 \x03(\x0b\x32\x32.wandb_internal.MapStringKeyStringValue.ValueEntry\x1a,\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcb\x01\n#MapStringKeyMapStringKeyStringValue\x12M\n\x05value\x18\x01 \x03(\x0b\x32>.wandb_internal.MapStringKeyMapStringKeyStringValue.ValueEntry\x1aU\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue:\x02\x38\x01\"\x9a\x01\n\x12OpenMetricsFilters\x12\x33\n\x08sequence\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValueH\x00\x12\x46\n\x07mapping\x18\x02 \x01(\x0b\x32\x33.wandb_internal.MapStringKeyMapStringKeyStringValueH\x00\x42\x07\n\x05value\"7\n\tRunMoment\x12\x0b\n\x03run\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x0e\n\x06metric\x18\x03 \x01(\t\"\x85\x45\n\x08Settings\x12-\n\x07\x61pi_key\x18\x37 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06run_id\x18k \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07run_url\x18q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07project\x18\x61 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x65ntity\x18\x45 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07log_dir\x18U \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0clog_internal\x18V \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfiles_dir\x18\x46 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12:\n\x15_disable_update_check\x18\xa5\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\x05_args\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12/\n\x0b_aws_lambda\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x44\n\x1f_async_upload_concurrency_limit\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x32\n\x0e_cli_only_mode\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06_colab\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x05_cuda\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\r_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10_disable_service\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15_disable_setproctitle\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0e_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0f_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\x0c_except_exit\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\x0b_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x44\n\x13_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12\x42\n\x1c_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x38\n\x14_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x16_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x17_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12=\n\x17_internal_queue_timeout\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08_ipython\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_jupyter\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\r_jupyter_root\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07_kaggle\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x16_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\n_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0f_network_buffer\x18\x1b \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12)\n\x05_noop\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\t_notebook\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x05_sync\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x03_os\x18 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x11_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\r_require_core\x18$ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x36\n\x12_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_service_wait\x18\' \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f_start_datetime\x18( \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0b_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12/\n\n_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12@\n\x1a_stats_sample_rate_seconds\x18+ \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x19_stats_samples_to_average\x18, \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x12_stats_join_assets\x18- \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12G\n!_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12N\n\x1d_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12G\n\x1b_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_tracelog\x18\x32 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\r_unsaved_keys\x18\x33 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12,\n\x08_windows\x18\x34 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10\x61llow_val_change\x18\x35 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\tanonymous\x18\x36 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12P\n\x1f\x61zure_account_url_to_access_key\x18\x38 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12.\n\x08\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08\x63ode_dir\x18: \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0c\x63onfig_paths\x18; \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12-\n\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\ndeployment\x18= \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\x0c\x64isable_code\x18> \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x14\x64isable_job_creation\x18\x41 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08\x64isabled\x18\x42 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06\x64ocker\x18\x43 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05\x65mail\x18\x44 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05\x66orce\x18G \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\ngit_commit\x18H \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\ngit_remote\x18I \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0egit_remote_url\x18J \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08git_root\x18K \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11heartbeat_seconds\x18L \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12*\n\x04host\x18M \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cinit_timeout\x18O \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08is_local\x18P \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\njob_source\x18Q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\rlabel_disable\x18R \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06launch\x18S \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12launch_config_path\x18T \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x14log_symlink_internal\x18W \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10log_symlink_user\x18X \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08log_user\x18Y \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rlogin_timeout\x18Z \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12*\n\x04mode\x18\\ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rnotebook_name\x18] \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07problem\x18^ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07program\x18_ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0fprogram_relpath\x18` \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0bproject_url\x18\x62 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05quiet\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06reinit\x18\x64 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07relogin\x18\x65 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06resume\x18\x66 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cresume_fname\x18g \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07resumed\x18h \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tfork_from\x18\xa4\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12.\n\x08root_dir\x18i \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_group\x18j \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0crun_job_type\x18l \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_mode\x18m \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_name\x18n \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_notes\x18o \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x08run_tags\x18p \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x35\n\x11sagemaker_disable\x18r \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tsave_code\x18s \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x0fsettings_system\x18t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12settings_workspace\x18u \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bshow_colors\x18v \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\nshow_emoji\x18w \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0bshow_errors\x18x \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tshow_info\x18y \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rshow_warnings\x18z \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06silent\x18{ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cstart_method\x18| \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x06strict\x18} \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0esummary_errors\x18~ \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0fsummary_timeout\x18\x7f \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x10summary_warnings\x18\x80\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\x08sweep_id\x18\x81\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10sweep_param_path\x18\x82\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tsweep_url\x18\x83\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07symlink\x18\x84\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08sync_dir\x18\x85\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tsync_file\x18\x86\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13sync_symlink_latest\x18\x87\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rsystem_sample\x18\x88\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x15system_sample_seconds\x18\x89\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12J\n%table_raise_on_max_row_limit_exceeded\x18\x8a\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08timespec\x18\x8b\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x07tmp_dir\x18\x8c\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08username\x18\x8d\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\twandb_dir\x18\x8e\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\r_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\r_jupyter_path\x18\x90\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08job_name\x18\x91\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x11_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12<\n\x16_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12J\n#_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12J\n#_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x18_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12L\n%_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12L\n%_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x1e_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x38\n\x12_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1f_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1f_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12?\n\x18_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12:\n\x15_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12,\n\x07_shared\x18\xa2\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x08_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValueb\x06proto3')
|
18
18
|
|
19
19
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
20
20
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'wandb.proto.wandb_settings_pb2', globals())
|
@@ -40,5 +40,5 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
40
40
|
_RUNMOMENT._serialized_start=622
|
41
41
|
_RUNMOMENT._serialized_end=677
|
42
42
|
_SETTINGS._serialized_start=680
|
43
|
-
_SETTINGS._serialized_end=
|
43
|
+
_SETTINGS._serialized_end=9517
|
44
44
|
# @@protoc_insertion_point(module_scope)
|
wandb/sdk/artifacts/artifact.py
CHANGED
@@ -225,10 +225,14 @@ class Artifact:
|
|
225
225
|
attrs = response.get("artifact")
|
226
226
|
if attrs is None:
|
227
227
|
return None
|
228
|
-
|
229
|
-
|
228
|
+
attr_project = attrs["artifactSequence"]["project"]
|
229
|
+
entity_name = ""
|
230
|
+
project_name = ""
|
231
|
+
if attr_project:
|
232
|
+
entity_name = attr_project["entityName"]
|
233
|
+
project_name = attr_project["name"]
|
230
234
|
name = "{}:v{}".format(attrs["artifactSequence"]["name"], attrs["versionIndex"])
|
231
|
-
return cls._from_attrs(
|
235
|
+
return cls._from_attrs(entity_name, project_name, name, attrs, client)
|
232
236
|
|
233
237
|
@classmethod
|
234
238
|
def _from_name(
|
@@ -284,7 +288,9 @@ class Artifact:
|
|
284
288
|
aliases = [
|
285
289
|
alias["alias"]
|
286
290
|
for alias in attrs["aliases"]
|
287
|
-
if alias["artifactCollection"]
|
291
|
+
if alias["artifactCollection"]
|
292
|
+
and alias["artifactCollection"]["project"]
|
293
|
+
and alias["artifactCollection"]["project"]["entityName"] == entity
|
288
294
|
and alias["artifactCollection"]["project"]["name"] == project
|
289
295
|
and alias["artifactCollection"]["name"] == name.split(":")[0]
|
290
296
|
]
|
@@ -293,8 +299,12 @@ class Artifact:
|
|
293
299
|
]
|
294
300
|
assert len(version_aliases) == 1
|
295
301
|
artifact._version = version_aliases[0]
|
296
|
-
|
297
|
-
artifact.
|
302
|
+
attr_project = attrs["artifactSequence"]["project"]
|
303
|
+
artifact._source_entity = ""
|
304
|
+
artifact._source_project = ""
|
305
|
+
if attr_project:
|
306
|
+
artifact._source_entity = attr_project["entityName"]
|
307
|
+
artifact._source_project = attr_project["name"]
|
298
308
|
artifact._source_name = "{}:v{}".format(
|
299
309
|
attrs["artifactSequence"]["name"], attrs["versionIndex"]
|
300
310
|
)
|
@@ -861,8 +871,12 @@ class Artifact:
|
|
861
871
|
if attrs is None:
|
862
872
|
raise ValueError(f"Unable to fetch artifact with id {artifact_id}")
|
863
873
|
self._id = artifact_id
|
864
|
-
|
865
|
-
self.
|
874
|
+
attr_project = attrs["artifactSequence"]["project"]
|
875
|
+
self._entity = ""
|
876
|
+
self._project = ""
|
877
|
+
if attr_project:
|
878
|
+
self._entity = attr_project["entityName"]
|
879
|
+
self._project = attr_project["name"]
|
866
880
|
self._name = "{}:v{}".format(
|
867
881
|
attrs["artifactSequence"]["name"], attrs["versionIndex"]
|
868
882
|
)
|
@@ -881,7 +895,9 @@ class Artifact:
|
|
881
895
|
self._aliases = [
|
882
896
|
alias["alias"]
|
883
897
|
for alias in attrs["aliases"]
|
884
|
-
if alias["artifactCollection"]
|
898
|
+
if alias["artifactCollection"]
|
899
|
+
and alias["artifactCollection"]["project"]
|
900
|
+
and alias["artifactCollection"]["project"]["entityName"] == self._entity
|
885
901
|
and alias["artifactCollection"]["project"]["name"] == self._project
|
886
902
|
and alias["artifactCollection"]["name"] == self._name.split(":")[0]
|
887
903
|
and not util.alias_is_version_index(alias["alias"])
|
@@ -75,25 +75,22 @@ class ArtifactSaver:
|
|
75
75
|
history_step: Optional[int] = None,
|
76
76
|
base_id: Optional[str] = None,
|
77
77
|
) -> Optional[Dict]:
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
)
|
95
|
-
finally:
|
96
|
-
pass
|
78
|
+
return self._save_internal(
|
79
|
+
type,
|
80
|
+
name,
|
81
|
+
client_id,
|
82
|
+
sequence_client_id,
|
83
|
+
distributed_id,
|
84
|
+
finalize,
|
85
|
+
metadata,
|
86
|
+
ttl_duration_seconds,
|
87
|
+
description,
|
88
|
+
aliases,
|
89
|
+
use_after_commit,
|
90
|
+
incremental,
|
91
|
+
history_step,
|
92
|
+
base_id,
|
93
|
+
)
|
97
94
|
|
98
95
|
def _save_internal(
|
99
96
|
self,
|
wandb/sdk/interface/interface.py
CHANGED
@@ -25,6 +25,7 @@ from typing import (
|
|
25
25
|
Union,
|
26
26
|
)
|
27
27
|
|
28
|
+
from wandb import termwarn
|
28
29
|
from wandb.proto import wandb_internal_pb2 as pb
|
29
30
|
from wandb.proto import wandb_telemetry_pb2 as tpb
|
30
31
|
from wandb.sdk.artifacts.artifact import Artifact
|
@@ -447,16 +448,27 @@ class InterfaceBase:
|
|
447
448
|
path = artifact.get_entry("wandb-job.json").download()
|
448
449
|
with open(path) as f:
|
449
450
|
job_info = json.load(f)
|
451
|
+
|
450
452
|
except Exception as e:
|
451
453
|
logger.warning(
|
452
454
|
f"Failed to download partial job info from artifact {artifact}, : {e}"
|
453
455
|
)
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
456
|
+
termwarn(
|
457
|
+
f"Failed to download partial job info from artifact {artifact}, : {e}"
|
458
|
+
)
|
459
|
+
return
|
460
|
+
|
461
|
+
try:
|
462
|
+
use_artifact = self._make_proto_use_artifact(
|
463
|
+
use_artifact=use_artifact,
|
464
|
+
job_name=artifact.name,
|
465
|
+
job_info=job_info,
|
466
|
+
metadata=artifact.metadata,
|
467
|
+
)
|
468
|
+
except Exception as e:
|
469
|
+
logger.warning(f"Failed to construct use artifact proto: {e}")
|
470
|
+
termwarn(f"Failed to construct use artifact proto: {e}")
|
471
|
+
return
|
460
472
|
|
461
473
|
self._publish_use_artifact(use_artifact)
|
462
474
|
|
wandb/sdk/launch/_launch.py
CHANGED
@@ -62,6 +62,7 @@ def resolve_agent_config( # noqa: C901
|
|
62
62
|
max_jobs: Optional[int],
|
63
63
|
queues: Optional[Tuple[str]],
|
64
64
|
config: Optional[str],
|
65
|
+
verbosity: Optional[int],
|
65
66
|
) -> Tuple[Dict[str, Any], Api]:
|
66
67
|
"""Resolve the agent config.
|
67
68
|
|
@@ -72,6 +73,7 @@ def resolve_agent_config( # noqa: C901
|
|
72
73
|
max_jobs (int): The max number of jobs.
|
73
74
|
queues (Tuple[str]): The queues.
|
74
75
|
config (str): The config.
|
76
|
+
verbosity (int): How verbose to print, 0 or None = default, 1 = print status every 20 seconds, 2 = also print debugging information
|
75
77
|
|
76
78
|
Returns:
|
77
79
|
Tuple[Dict[str, Any], Api]: The resolved config and api.
|
@@ -83,6 +85,7 @@ def resolve_agent_config( # noqa: C901
|
|
83
85
|
"queues": [],
|
84
86
|
"registry": {},
|
85
87
|
"builder": {},
|
88
|
+
"verbosity": 0,
|
86
89
|
}
|
87
90
|
user_set_project = False
|
88
91
|
resolved_config: Dict[str, Any] = defaults
|
@@ -123,6 +126,8 @@ def resolve_agent_config( # noqa: C901
|
|
123
126
|
resolved_config.update({"max_jobs": int(max_jobs)})
|
124
127
|
if queues:
|
125
128
|
resolved_config.update({"queues": list(queues)})
|
129
|
+
if verbosity:
|
130
|
+
resolved_config.update({"verbosity": int(verbosity)})
|
126
131
|
# queue -> queues
|
127
132
|
if resolved_config.get("queue"):
|
128
133
|
if isinstance(resolved_config.get("queue"), str):
|
@@ -14,6 +14,7 @@ import wandb.docker as docker
|
|
14
14
|
from wandb.apis.internal import Api
|
15
15
|
from wandb.errors import CommError
|
16
16
|
from wandb.sdk.launch import utils
|
17
|
+
from wandb.sdk.launch.utils import get_entrypoint_file
|
17
18
|
from wandb.sdk.lib.runid import generate_id
|
18
19
|
|
19
20
|
from .errors import LaunchError
|
@@ -135,7 +136,7 @@ class LaunchProject:
|
|
135
136
|
if override_entrypoint:
|
136
137
|
_logger.info("Adding override entry point")
|
137
138
|
self.override_entrypoint = EntryPoint(
|
138
|
-
name=
|
139
|
+
name=get_entrypoint_file(override_entrypoint),
|
139
140
|
command=override_entrypoint,
|
140
141
|
)
|
141
142
|
|
@@ -536,24 +537,6 @@ class LaunchProject:
|
|
536
537
|
self.git_version = branch_name
|
537
538
|
|
538
539
|
|
539
|
-
def _get_entrypoint_file(entrypoint: List[str]) -> Optional[str]:
|
540
|
-
"""Get the entrypoint file from the given command.
|
541
|
-
|
542
|
-
Args:
|
543
|
-
entrypoint (List[str]): List of command and arguments.
|
544
|
-
|
545
|
-
Returns:
|
546
|
-
Optional[str]: The entrypoint file if found, otherwise None.
|
547
|
-
"""
|
548
|
-
if not entrypoint:
|
549
|
-
return None
|
550
|
-
if entrypoint[0].endswith(".py") or entrypoint[0].endswith(".sh"):
|
551
|
-
return entrypoint[0]
|
552
|
-
if len(entrypoint) < 2:
|
553
|
-
return None
|
554
|
-
return entrypoint[1]
|
555
|
-
|
556
|
-
|
557
540
|
class EntryPoint:
|
558
541
|
"""An entry point into a wandb launch specification."""
|
559
542
|
|
@@ -570,7 +553,9 @@ class EntryPoint:
|
|
570
553
|
|
571
554
|
def update_entrypoint_path(self, new_path: str) -> None:
|
572
555
|
"""Updates the entrypoint path to a new path."""
|
573
|
-
if len(self.command) == 2 and
|
556
|
+
if len(self.command) == 2 and (
|
557
|
+
self.command[0].startswith("python") or self.command[0] == "bash"
|
558
|
+
):
|
574
559
|
self.command[1] = new_path
|
575
560
|
|
576
561
|
|
wandb/sdk/launch/agent/agent.py
CHANGED
@@ -45,7 +45,10 @@ MAX_RESUME_COUNT = 5
|
|
45
45
|
|
46
46
|
RUN_INFO_GRACE_PERIOD = 60
|
47
47
|
|
48
|
-
|
48
|
+
DEFAULT_STOPPED_RUN_TIMEOUT = 60
|
49
|
+
|
50
|
+
DEFAULT_PRINT_INTERVAL = 5 * 60
|
51
|
+
VERBOSE_PRINT_INTERVAL = 20
|
49
52
|
|
50
53
|
_env_timeout = os.environ.get("WANDB_LAUNCH_START_TIMEOUT")
|
51
54
|
if _env_timeout:
|
@@ -105,30 +108,29 @@ def _max_from_config(
|
|
105
108
|
return max_from_config
|
106
109
|
|
107
110
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
_logger.debug("Recieved runSpec in _is_scheduler_job that was empty")
|
111
|
+
class InternalAgentLogger:
|
112
|
+
def __init__(self, verbosity=0):
|
113
|
+
self._print_to_terminal = verbosity >= 2
|
112
114
|
|
113
|
-
|
114
|
-
|
115
|
+
def error(self, message: str):
|
116
|
+
if self._print_to_terminal:
|
117
|
+
wandb.termerror(f"{LOG_PREFIX}{message}")
|
118
|
+
_logger.error(f"{LOG_PREFIX}{message}")
|
115
119
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
return True
|
120
|
+
def warn(self, message: str):
|
121
|
+
if self._print_to_terminal:
|
122
|
+
wandb.termwarn(f"{LOG_PREFIX}{message}")
|
123
|
+
_logger.warn(f"{LOG_PREFIX}{message}")
|
121
124
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
return False
|
125
|
+
def info(self, message: str):
|
126
|
+
if self._print_to_terminal:
|
127
|
+
wandb.termlog(f"{LOG_PREFIX}{message}")
|
128
|
+
_logger.info(f"{LOG_PREFIX}{message}")
|
127
129
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
130
|
+
def debug(self, message: str):
|
131
|
+
if self._print_to_terminal:
|
132
|
+
wandb.termlog(f"{LOG_PREFIX}{message}")
|
133
|
+
_logger.debug(f"{LOG_PREFIX}{message}")
|
132
134
|
|
133
135
|
|
134
136
|
class LaunchAgent:
|
@@ -184,7 +186,13 @@ class LaunchAgent:
|
|
184
186
|
self._max_jobs = _max_from_config(config, "max_jobs")
|
185
187
|
self._max_schedulers = _max_from_config(config, "max_schedulers")
|
186
188
|
self._secure_mode = config.get("secure_mode", False)
|
189
|
+
self._verbosity = config.get("verbosity", 0)
|
190
|
+
self._internal_logger = InternalAgentLogger(verbosity=self._verbosity)
|
191
|
+
self._last_status_print_time = 0.0
|
187
192
|
self.default_config: Dict[str, Any] = config
|
193
|
+
self._stopped_run_timeout = config.get(
|
194
|
+
"stopped_run_timeout", DEFAULT_STOPPED_RUN_TIMEOUT
|
195
|
+
)
|
188
196
|
|
189
197
|
# Get agent version from env var if present, otherwise wandb version
|
190
198
|
self.version: str = "wandb@" + wandb.__version__
|
@@ -228,6 +236,33 @@ class LaunchAgent:
|
|
228
236
|
self._name = agent_response["name"]
|
229
237
|
self._init_agent_run()
|
230
238
|
|
239
|
+
def _is_scheduler_job(self, run_spec: Dict[str, Any]) -> bool:
|
240
|
+
"""Determine whether a job/runSpec is a sweep scheduler."""
|
241
|
+
if not run_spec:
|
242
|
+
self._internal_logger.debug(
|
243
|
+
"Recieved runSpec in _is_scheduler_job that was empty"
|
244
|
+
)
|
245
|
+
|
246
|
+
if run_spec.get("uri") != Scheduler.PLACEHOLDER_URI:
|
247
|
+
return False
|
248
|
+
|
249
|
+
if run_spec.get("resource") == "local-process":
|
250
|
+
# Any job pushed to a run queue that has a scheduler uri is
|
251
|
+
# allowed to use local-process
|
252
|
+
if run_spec.get("job"):
|
253
|
+
return True
|
254
|
+
|
255
|
+
# If a scheduler is local-process and run through CLI, also
|
256
|
+
# confirm command is in format: [wandb scheduler <sweep>]
|
257
|
+
cmd = run_spec.get("overrides", {}).get("entry_point", [])
|
258
|
+
if len(cmd) < 3:
|
259
|
+
return False
|
260
|
+
|
261
|
+
if cmd[:2] != ["wandb", "scheduler"]:
|
262
|
+
return False
|
263
|
+
|
264
|
+
return True
|
265
|
+
|
231
266
|
async def fail_run_queue_item(
|
232
267
|
self,
|
233
268
|
run_queue_item_id: str,
|
@@ -298,6 +333,7 @@ class LaunchAgent:
|
|
298
333
|
|
299
334
|
def print_status(self) -> None:
|
300
335
|
"""Prints the current status of the agent."""
|
336
|
+
self._last_status_print_time = time.time()
|
301
337
|
output_str = "agent "
|
302
338
|
if self._name:
|
303
339
|
output_str += f"{self._name} "
|
@@ -344,8 +380,8 @@ class LaunchAgent:
|
|
344
380
|
if run_state.lower() != "pending":
|
345
381
|
return True
|
346
382
|
except CommError:
|
347
|
-
|
348
|
-
f"Run {entity}/{project}/{run_id} with rqi id: {rqi_id} did not have associated run"
|
383
|
+
self._internal_logger.info(
|
384
|
+
f"Run {entity}/{project}/{run_id} with rqi id: {rqi_id} did not have associated run",
|
349
385
|
)
|
350
386
|
return False
|
351
387
|
|
@@ -361,8 +397,8 @@ class LaunchAgent:
|
|
361
397
|
job_and_run_status.entity is not None
|
362
398
|
and job_and_run_status.entity != self._entity
|
363
399
|
):
|
364
|
-
|
365
|
-
"Skipping check for completed run status because run is on a different entity than agent"
|
400
|
+
self._internal_logger.info(
|
401
|
+
"Skipping check for completed run status because run is on a different entity than agent",
|
366
402
|
)
|
367
403
|
elif exception is not None:
|
368
404
|
tb_str = traceback.format_exception(
|
@@ -378,8 +414,8 @@ class LaunchAgent:
|
|
378
414
|
fnames,
|
379
415
|
)
|
380
416
|
elif job_and_run_status.project is None or job_and_run_status.run_id is None:
|
381
|
-
|
382
|
-
f"called finish_thread_id on thread whose tracker has no project or run id. RunQueueItemID: {job_and_run_status.run_queue_item_id}"
|
417
|
+
self._internal_logger.info(
|
418
|
+
f"called finish_thread_id on thread whose tracker has no project or run id. RunQueueItemID: {job_and_run_status.run_queue_item_id}",
|
383
419
|
)
|
384
420
|
wandb.termerror(
|
385
421
|
"Missing project or run id on thread called finish thread id"
|
@@ -430,7 +466,9 @@ class LaunchAgent:
|
|
430
466
|
job_and_run_status.run_queue_item_id, _msg, "run", fnames
|
431
467
|
)
|
432
468
|
else:
|
433
|
-
|
469
|
+
self._internal_logger.info(
|
470
|
+
f"Finish thread id {thread_id} had no exception and no run"
|
471
|
+
)
|
434
472
|
wandb._sentry.exception(
|
435
473
|
"launch agent called finish thread id on thread without run or exception"
|
436
474
|
)
|
@@ -458,7 +496,7 @@ class LaunchAgent:
|
|
458
496
|
await self.update_status(AGENT_RUNNING)
|
459
497
|
|
460
498
|
# parse job
|
461
|
-
|
499
|
+
self._internal_logger.info("Parsing launch spec")
|
462
500
|
launch_spec = job["runSpec"]
|
463
501
|
|
464
502
|
# Abort if this job attempts to override secure mode
|
@@ -511,6 +549,10 @@ class LaunchAgent:
|
|
511
549
|
KeyboardInterrupt: if the agent is requested to stop.
|
512
550
|
"""
|
513
551
|
self.print_status()
|
552
|
+
if self._verbosity == 0:
|
553
|
+
print_interval = DEFAULT_PRINT_INTERVAL
|
554
|
+
else:
|
555
|
+
print_interval = VERBOSE_PRINT_INTERVAL
|
514
556
|
try:
|
515
557
|
while True:
|
516
558
|
job = None
|
@@ -532,7 +574,7 @@ class LaunchAgent:
|
|
532
574
|
file_saver = RunQueueItemFileSaver(
|
533
575
|
self._wandb_run, job["runQueueItemId"]
|
534
576
|
)
|
535
|
-
if _is_scheduler_job(job.get("runSpec", {})):
|
577
|
+
if self._is_scheduler_job(job.get("runSpec", {})):
|
536
578
|
# If job is a scheduler, and we are already at the cap, ignore,
|
537
579
|
# don't ack, and it will be pushed back onto the queue in 1 min
|
538
580
|
if self.num_running_schedulers >= self._max_schedulers:
|
@@ -567,6 +609,7 @@ class LaunchAgent:
|
|
567
609
|
await self.update_status(AGENT_POLLING)
|
568
610
|
else:
|
569
611
|
await self.update_status(AGENT_RUNNING)
|
612
|
+
if time.time() - self._last_status_print_time > print_interval:
|
570
613
|
self.print_status()
|
571
614
|
|
572
615
|
if self.num_running_jobs == self._max_jobs or job is None:
|
@@ -634,14 +677,14 @@ class LaunchAgent:
|
|
634
677
|
await self.check_sweep_state(launch_spec, api)
|
635
678
|
|
636
679
|
job_tracker.update_run_info(project)
|
637
|
-
|
680
|
+
self._internal_logger.info("Fetching and validating project...")
|
638
681
|
project.fetch_and_validate_project()
|
639
|
-
|
682
|
+
self._internal_logger.info("Fetching resource...")
|
640
683
|
resource = launch_spec.get("resource") or "local-container"
|
641
684
|
backend_config: Dict[str, Any] = {
|
642
685
|
PROJECT_SYNCHRONOUS: False, # agent always runs async
|
643
686
|
}
|
644
|
-
|
687
|
+
self._internal_logger.info("Loading backend")
|
645
688
|
override_build_config = launch_spec.get("builder")
|
646
689
|
|
647
690
|
_, build_config, registry_config = construct_agent_configs(
|
@@ -661,13 +704,13 @@ class LaunchAgent:
|
|
661
704
|
assert entrypoint is not None
|
662
705
|
image_uri = await builder.build_image(project, entrypoint, job_tracker)
|
663
706
|
|
664
|
-
|
707
|
+
self._internal_logger.info("Backend loaded...")
|
665
708
|
if isinstance(backend, LocalProcessRunner):
|
666
709
|
run = await backend.run(project, image_uri)
|
667
710
|
else:
|
668
711
|
assert image_uri
|
669
712
|
run = await backend.run(project, image_uri)
|
670
|
-
if _is_scheduler_job(launch_spec):
|
713
|
+
if self._is_scheduler_job(launch_spec):
|
671
714
|
with self._jobs_lock:
|
672
715
|
self._jobs[thread_id].is_scheduler = True
|
673
716
|
wandb.termlog(
|
@@ -700,7 +743,7 @@ class LaunchAgent:
|
|
700
743
|
if stopped_time is None:
|
701
744
|
stopped_time = time.time()
|
702
745
|
else:
|
703
|
-
if time.time() - stopped_time >
|
746
|
+
if time.time() - stopped_time > self._stopped_run_timeout:
|
704
747
|
await run.cancel()
|
705
748
|
await asyncio.sleep(AGENT_POLLING_INTERVAL)
|
706
749
|
|
@@ -720,7 +763,7 @@ class LaunchAgent:
|
|
720
763
|
project=launch_spec["project"],
|
721
764
|
)
|
722
765
|
except Exception as e:
|
723
|
-
|
766
|
+
self._internal_logger.debug(f"Fetch sweep state error: {e}")
|
724
767
|
state = None
|
725
768
|
|
726
769
|
if state != "RUNNING" and state != "PAUSED":
|
wandb/sdk/launch/agent/config.py
CHANGED
@@ -225,6 +225,14 @@ class AgentConfig(BaseModel):
|
|
225
225
|
None,
|
226
226
|
description="The builder to use.",
|
227
227
|
)
|
228
|
+
verbosity: Optional[int] = Field(
|
229
|
+
0,
|
230
|
+
description="How verbose to print, 0 = default, 1 = verbose, 2 = very verbose",
|
231
|
+
)
|
232
|
+
stopped_run_timeout: Optional[int] = Field(
|
233
|
+
60,
|
234
|
+
description="How many seconds to wait after receiving the stop command before forcibly cancelling a run.",
|
235
|
+
)
|
228
236
|
|
229
237
|
class Config:
|
230
238
|
extra = "forbid"
|