Sebelum memulai
- XPK yang diinstal
- Alat Kubernetes yang terinstal
- Menginstal gcloud CLI
- Mengaktifkan TPU API
- Mengaktifkan Google Kubernetes Engine API
- Membuat cluster Google Kubernetes Engine
Dokumen ini menjelaskan cara memecahkan masalah beban kerja Pathways Anda.
Melihat log
Di Logs Explorer Cloud Logging, gunakan kueri berikut yang disesuaikan agar cocok dengan project, region, cluster, dan beban kerja Anda.
resource.type="k8s_container" resource.labels.project_id="PROJECT" resource.labels.location="LOCATION" resource.labels.cluster_name="CLUSTER" resource.labels.namespace_name="default" resource.labels.pod_name:"WORKLOAD_NAME"
Ganti kode berikut:
PROJECT: Google Cloud project ID AndaLOCATION: region atau zona tempat Anda membuat cluster GKECLUSTER: nama cluster GKE AndaWORKLOAD_NAME: nama workload Anda saat menggunakan XPK atau nama JobSet saat menggunakankubectl
Kueri ini akan cocok dengan beberapa penampung Kubernetes Pathways dengan nama seperti
pathways-rm, pathways-proxy, pathways-worker. Anda dapat mempersempit
penampung yang menyebabkan masalah dengan menambahkan filter pada nama penampung seperti
resource.labels.container_name:"<container_name>"
Pemantauan
Pemantauan kesehatan
Anda dapat memantau kondisi berbagai komponen Pathways dengan mencari entri di log container, misalnya:
pathways-proxy siap melayani permintaan koneksi baru saat log berikut ditulis:
kubectl logs ${HEAD_POD_NAME} --container pathways-proxy
...
I1101 04:51:41.967764 1 proxy_server.cc:125] IFRT proxy server started with status OK
pathways-rm siap melayani permintaan koneksi baru saat log berikut ditulis:
kubectl logs $HEAD_POD_NAME --container pathways-rm
...
I1101 04:50:41.967764 1 server_lib.cc:1473] Pathways Server serving on [::]:29001
Untuk memverifikasi bahwa semua TPU yang terdaftar di Pathways Resource Manager sudah siap, Anda dapat mencari ***<num slices>/<num slices> Pathways Slices Now Ready *** di log container pathways-rm:
kubectl logs $HEAD_POD_NAME --container pathways-rm
...
I1101 04:52:41.967764 1 multi_job_allocator.cc:1063] *** 2/2 Pathways Slices Now Ready ***
Klien Pathways dapat membuat koneksi ke server Proxy IFRT selama server proxy siap meskipun tidak semua slice siap. Tugas Anda akan berfungsi dengan slice virtual hingga slice siap. Slice virtual memungkinkan kode Anda berjalan saat TPU tidak tersedia.
pathways-worker siap melayani permintaan koneksi baru saat log berikut ditulis:
kubectl logs $WORKER_POD_NAME --container pathways-worker
...
I1101 04:50:41.967764 1 server_lib.cc:1473] Pathways Server serving on [::]:29001
Pengumpulan metrik
Pathways dapat menulis metrik sistem tingkat rendah ke Cloud Monitoring untuk proses debug. Metrik ini mencakup:
- Latensi Transfer DCN
- Latensi Kolektif
- Latensi Transfer Host ke Perangkat
- Latensi transfer Perangkat ke Host
Anda dapat menemukan metrik di dasbor Cloud Monitoring project {gcp_name} tempat cluster GKE berjalan.
Untuk memantau metrik ini di Metrics Explorer:
- Buka Metrics Explorer
- Memfilter menurut nama metrik menggunakan kolom Select a metric
- Filter menurut nama beban kerja dan rentang waktu dengan memilih Tambahkan Filter dan filter menurut pod_name
- Pilih jenis agregasi yang sesuai berdasarkan metrik dan workload yang Anda pantau.
Latensi transfer DCN
Ini adalah metrik Megascale XLA (MXLA) yang mengukur distribusi kumulatif latensi transfer jaringan untuk traffic multislice. Pengukuran latensi dimulai
saat permintaan agar data ditransfer melalui DCN dikeluarkan dan berakhir saat
konfirmasi diterima bahwa transfer data telah selesai. Untuk memantau metrik ini, filter menurut nama metrik dcn_transfer_latencies.
Latensi kolektif
Ini adalah metrik MXLA yang mengukur distribusi kumulatif latensi kolektif end-to-end untuk traffic multislice. Pengukuran latensi dimulai saat
permintaan untuk kolektif dikeluarkan dan berakhir saat pengakuan diterima
bahwa transfer data telah selesai. Untuk memantau metrik ini, filter menurut nama metrik collective_e2e_latency.
Latensi transfer host ke perangkat
Ini adalah metrik MXLA yang mengukur distribusi kumulatif latensi transfer host ke perangkat untuk traffic multislice. Pengukuran latensi dimulai saat
permintaan agar data ditransfer melalui DCN dikeluarkan dan berakhir saat
konfirmasi diterima bahwa transfer data telah selesai. Untuk memantau metrik ini, filter menurut nama metrik host_to_device_transfer_latencies.
Latensi transfer perangkat ke host
Ini adalah metrik MXLA yang mengukur distribusi kumulatif latensi transfer perangkat ke host untuk traffic multislice. Pengukuran latensi dimulai saat
permintaan data yang akan ditransfer melalui DCN dikeluarkan dan berakhir saat
konfirmasi diterima bahwa transfer data telah selesai. Untuk memantau metrik ini, filter menurut nama metrik device_to_host_transfer_latencies.
Men-debug error umum
Peringatan konfigurasi akselerator yang tidak dapat di-hash
Pesan berikut hanyalah peringatan dan tidak memengaruhi performa kode JAX Anda.
INFO:jax._src.cache_key:get (_hash_accelerator_config): unable to hash accelerator config, falling back to hashing devices + platform: UNIMPLEMENTED: GetTopologyForDevices is not supported for the IFRT proxy client. (type <class 'jaxlib.xla_extension.XlaRuntimeError'>)
Izin logging.logEntries.create ditolak pada resource
Jika Anda melihat error berikut, pastikan akun layanan Compute Engine yang digunakan oleh Vertex AI Workbench memiliki izin untuk menulis entri log ke sistem logging Google Cloud .
INFO:absl:Created 'ArrayHandler' with primary_host=0, replica-id=0
WARNING:absl:pathwaysutils: Detected Pathways-on-Cloud backend. Applying changes.
Failed to submit 1 logs.
Traceback (most recent call last):
File "/opt/conda/lib/python3.10/site-packages/google/api_core/grpc_helpers.py", line 65, in error_remapped_callable
return callable_(**args, **kwargs)
File "/opt/conda/lib/python3.10/site-packages/grpc/_channel.py", line 1181, in __call__
return _end_unary_response_blocking(state, call, False, None)
File "/opt/conda/lib/python3.10/site-packages/google/api_core/grpc_helpers.py", line 1006, in _end_unary_response_blocking
raise _InactiveRpcError(state) # pytype: disable-not-instantiable
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
status = StatusCode.PERMISSION_DENIED
details = "Permission 'logging.logEntries.create' denied on resource (or it may not exist)."
debug_error_string = "UNKNOWN:Error received from peer ipv4:216.239.34.174:443 {created_time:"2024-10-03T20:30:44.820425276+00.00", grpc_status:7, grpc_message:"Permission \'logging.logEntries.create\' denied on resource (or it may not exist)."}"
>
Untuk memperbaiki masalah ini, tambahkan peran Penulis Log ke akun layanan Compute Engine.
Tidak dapat terhubung ke server proxy IFRT
Jika Anda melihat error ini, klien proxy IFRT Anda tidak dapat terhubung ke server proxy IFRT.
- Pastikan jaringan VPC Anda dikonfigurasi dengan benar
- Pastikan firewall Anda dikonfigurasi untuk mengizinkan koneksi
- Pastikan cluster Pathways Anda telah disediakan
- Periksa pesan error saat memulai
Saat perintah JAX pertama yang mengirim perintah IFRT ke cluster Pathways
mencoba dieksekusi, perintah tersebut akan berhenti merespons selama sekitar satu menit, lalu menampilkan
RuntimeError seperti berikut:
RuntimeError: Unable to initialize backend 'proxy': UNAVAILABLE: Unable to establish connection to ifrt_proxy server, please check provided address example-workload-proxy-0-0.example-workload.default.svc.example-cluster-domain.:38676'; detailed error: DNS resolution failed (set JAX_PLATFORMS='' to automatically choose an available backend)
Ada koneksi yang sudah ada ke cluster Pathways
Cluster Pathways hanya dapat mempertahankan sesi dengan satu klien dalam satu waktu. Jika dua notebook terpisah mencoba terhubung ke cluster Pathways yang sama, salah satunya akan dapat terhubung dan yang lainnya akan menampilkan error berikut.
INFO:absl:Created ArrayHandler with primary_host=0, replica_id=0
WARNING:absl:pathwaysutils: Detected Pathways-on-Cloud backend. Applying changes.
E0927 21:19:52.919607 37624 rpc_helper.cc:56] Connection to IFRT proxy server was terminated: CANCELLED: Cancelled
E0927 21:20:03.467547 37719 rpc_helper.cc:56] Connection to IFRT proxy server was terminated: CANCELLED: Cancelled
E0927 21:20:14.011645 37807 rpc_helper.cc:56] Connection to IFRT proxy server was terminated: CANCELLED: Cancelled
E0927 21:20:24.557955 37924 rpc_helper.cc:56] Connection to IFRT proxy server was terminated: CANCELLED: Cancelled
---------------------------------------------------------------------------
XlaRuntimeError Traceback (most recent call last)
File /opt/conda/lib/python3.10/site-packages/jax/_src/xla_bridge.py:887, in backends()
885 continue
--> 887 backend = _init_backend(platform)
888 _backends[platform] = backend
File /opt/conda/lib/python3.10/site-packages/jax/_src/xla_bridge.py:973, in _init_backend(platform)
972 logger.debug("Initializing backend '%s'", platform)
--> 973 backend = registration.factory()
974 # TODO: consider raising more descriptive errors directly from backend
975 # factories instead of returning None.
File /opt/conda/lib/python3.10/site-packages/pathwaysutils/proxy_backend.py:24, in register_backend_factory.<locals>.<lambda>()
21 def register_backend_factory():
22 xla_bridge.register_backend_factory(
23 "proxy",
---> 24 lambda: ifrt_proxy.get_client(
25 jax.config.read("jax_backend_target"),
26 ifrt_proxy.ClientConnectionOptions(),
27 ),
28 priority=-1,
29 )
XlaRuntimeError: UNAVAILABLE: Unable to establish connection to ifrt_proxy server, please check provided address example-workload-proxy-0-0.example-workload.default.svc.example-cluster-domain.:38676'; detailed error: Connection to IFRT proxy server was terminated: CANCELLED: Cancelled
During handling of the above exception, another exception occurred:
RuntimeError Traceback (most recent call last)
Cell In[2], line 4
1 import pathwaysutils
3 import jax
----> 4 print(jax.devices())
File /opt/conda/lib/python3.10/site-packages/jax/_src/xla_bridge.py:1085, in devices(backend)
1060 def devices(
1061 backend: str | xla_client.Client | None = None
1062 ) -> list[xla_client.Device]:
1063 """Returns a list of all devices for a given backend.
1064
1065 .. currentmodule:: jaxlib.xla_extension
(...)
1083 List of Device subclasses.
1084 """
-> 1085 return get_backend(backend).devices()
File /opt/conda/lib/python3.10/site-packages/jax/_src/xla_bridge.py:1019, in get_backend(platform)
1015 @lru_cache(maxsize=None) # don't use util.memoize because there is no X64 dependence.
1016 def get_backend(
1017 platform: None | str | xla_client.Client = None
1018 ) -> xla_client.Client:
-> 1019 return _get_backend_uncached(platform)
File /opt/conda/lib/python3.10/site-packages/jax/_src/xla_bridge.py:998, in _get_backend_uncached(platform)
994 return platform
996 platform = (platform or _XLA_BACKEND.value or _PLATFORM_NAME.value or None)
--> 998 bs = backends()
999 if platform is not None:
1000 platform = canonicalize_platform(platform)
File /opt/conda/lib/python3.10/site-packages/jax/_src/xla_bridge.py:903, in backends()
901 else:
902 err_msg += " (you may need to uninstall the failing plugin package, or set JAX_PLATFORMS=cpu to skip this backend.)"
--> 903 raise RuntimeError(err_msg)
905 assert _default_backend is not None
906 if not config.jax_platforms.value:
RuntimeError: Unable to initialize backend 'proxy': UNAVAILABLE: Unable to establish connection to ifrt_proxy server, please check provided address 'example-workload-proxy-0-0.example-workload.default.svc.example-cluster-domain.:38676'; detailed error: Connection to IFRT proxy server was terminated: CANCELLED: Cancelled (set JAX_PLATFORMS='' to automatically choose an available backend)
Setelah klien asli terputus, klien kedua akan dapat terhubung. Setelah koneksi terputus secara tidak terduga, Anda mungkin perlu memulai ulang cluster Pathways agar klien lain dapat terhubung.
LocalProxy.init() menerima argumen kata kunci 'unbound_message' yang tidak terduga
Jika Anda melihat error ini setelah mengimpor pathwaysutils, periksa apakah ada versi Flask atau Werkzeug yang sudah tidak berlaku yang diinstal di lingkungan Anda:
pip3 list --outdated (replacing pip with pip3 as needed)
Jika Flask atau Werkzeug tercantum, pertimbangkan untuk mengupgradenya dengan catatan bahwa tindakan ini dapat merusak paket atau dependensi lain dalam project Anda:
pip install flask Werkzeug --upgrade ()
Error internal dari server proxy
"Internal error from proxy server during Array::IsDeleted(): UNAVAILABLE:Connection to IFRT proxy server was terminated: FAILED_PRECONDITION:
GrpcClientSession: writes no longer allowed."
Error ini menunjukkan bahwa server Proxy IFRT telah terputus dari klien. Masalah ini dapat diperbaiki dengan memulai ulang klien Anda. Untuk notebook, Anda dapat memulai ulang kernel notebook dan menjalankan kembali notebook.
SIGTERM dan HBM OOM
SIGTERM yang ditemukan dalam log yang terkait dengan error RESOURCE_EXHAUSTED dapat menunjukkan OOM HBM. Dalam hal ini, Anda dapat mengurangi jumlah memori HBM yang digunakan dalam kode JAX.
INVALID_ARGUMENT
"INVALID_ARGUMENT : Permanent error, with a last message of Lifecycle
matches_prefix cannot specify more than 50 prefixes per config.; Error while
initializing persistent cache storage Cloud Storage"
Error ini terjadi jika bucket Cloud Storage yang diteruskan ke tanda --pathways_gcs_location
telah mencapai batas kebijakan siklus proses maksimum. Jika hal ini terjadi, bersihkan kebijakan siklus proses Cloud Storage yang tidak lagi digunakan.
Error permanen
Permanent error, with a last message of The specified bucket does not exist.; Error while initializing persistent cache storage gcs
Error ini dicetak di pekerja Resource Manager atau Pathways saat Anda memberikan lokasi Cloud Storage yang tidak valid ke penampung jalur.
Respons error dari daemon
Error response from daemon: dockerfile parse error line 16: Unknown flag: exclude
Hal ini disebabkan oleh versi docker yang lama, upgrade versi docker Anda.
Klien dan server IFRT Proxy gagal menyetujui
IFRT Proxy client and server failed to agree on the protocol version; supported versions: client = [1, 1], server = [3, 14]
Hal ini menunjukkan bahwa MaxText versi lama sedang digunakan. Pastikan Anda membangun ulang image MaxText terbaru.
Langkah berikutnya
- Inferensi multihost dengan Pathways
- Batch workload dengan Pathways
- Mode interaktif jalur
- Memindahkan beban kerja JAX ke Pathways
- Pelatihan yang tangguh dengan Pathways