Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Jika Anda mengalami kesalahan, Anda dapat menggunakan daftar berikut untuk mencoba memecahkan masalah pekerjaan pelatihan Anda. Jika masalah berlanjut, hubungi AWS Support
Topik
Pertimbangan untuk Menggunakan SageMaker Debugger dengan Model Parallelism Library SageMaker
SageMaker Debugger tidak tersedia untuk pustaka SageMaker paralelisme model. Debugger diaktifkan secara default untuk semua pekerjaan SageMaker TensorFlow dan PyTorch pelatihan, dan Anda mungkin melihat kesalahan yang terlihat seperti berikut:
FileNotFoundError: [Errno 2] No such file or directory: '/opt/ml/checkpoints/metadata.json.sagemaker-uploading
Untuk memperbaiki masalah ini, nonaktifkan Debugger dengan meneruskan debugger_hook_config=False
saat membuat kerangka kerja estimator
seperti yang ditunjukkan pada contoh berikut.
bucket=sagemaker.Session().default_bucket()
base_job_name="sagemaker-checkpoint-test"
checkpoint_in_bucket="checkpoints"
# The S3 URI to store the checkpoints
checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket)
estimator = TensorFlow(
...
distribution={"smdistributed": {"modelparallel": { "enabled": True }}},
checkpoint_s3_uri=checkpoint_s3_bucket,
checkpoint_local_path="/opt/ml/checkpoints",
debugger_hook_config=False
)
Menyimpan Pos Pemeriksaan
Anda mungkin mengalami kesalahan berikut saat menyimpan pos pemeriksaan model besar di SageMaker AI:
InternalServerError: We encountered an internal error. Please try again
Ini bisa disebabkan oleh keterbatasan SageMaker AI saat mengunggah pos pemeriksaan lokal ke Amazon S3 selama pelatihan. Untuk menonaktifkan pos pemeriksaan di SageMaker AI, gunakan contoh berikut untuk mengunggah pos pemeriksaan secara eksplisit.
Jika Anda mengalami kesalahan sebelumnya, jangan gunakan checkpoint_s3_uri
dengan panggilan. SageMaker estimator
Saat menyimpan pos pemeriksaan untuk model yang lebih besar, kami sarankan untuk menyimpan pos pemeriksaan ke direktori khusus dan meneruskan yang sama ke fungsi pembantu (sebagai local_path
argumen).
import os
def aws_s3_sync(source, destination):
"""aws s3 sync in quiet mode and time profile"""
import time, subprocess
cmd = ["aws", "s3", "sync", "--quiet", source, destination]
print(f"Syncing files from {source} to {destination}")
start_time = time.time()
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()
end_time = time.time()
print("Time Taken to Sync: ", (end_time-start_time))
return
def sync_local_checkpoints_to_s3(local_path="/opt/ml/checkpoints", s3_uri=os.path.dirname(os.path.dirname(os.getenv('SM_MODULE_DIR', '')))+'/checkpoints'):
""" sample function to sync checkpoints from local path to s3 """
import boto3
#check if local path exists
if not os.path.exists(local_path):
raise RuntimeError("Provided local path {local_path} does not exist. Please check")
#check if s3 bucket exists
s3 = boto3.resource('s3')
if not s3_uri.startswith("s3://"):
raise ValueError(f"Provided s3 uri {s3_uri} is not valid.")
s3_bucket = s3_uri.replace('s3://','').split('/')[0]
print(f"S3 Bucket: {s3_bucket}")
try:
s3.meta.client.head_bucket(Bucket=s3_bucket)
except Exception as e:
raise e
aws_s3_sync(local_path, s3_uri)
return
def sync_s3_checkpoints_to_local(local_path="/opt/ml/checkpoints", s3_uri=os.path.dirname(os.path.dirname(os.getenv('SM_MODULE_DIR', '')))+'/checkpoints'):
""" sample function to sync checkpoints from s3 to local path """
import boto3
#try to create local path if it does not exist
if not os.path.exists(local_path):
print(f"Provided local path {local_path} does not exist. Creating...")
try:
os.makedirs(local_path)
except Exception as e:
raise RuntimeError(f"Failed to create {local_path}")
#check if s3 bucket exists
s3 = boto3.resource('s3')
if not s3_uri.startswith("s3://"):
raise ValueError(f"Provided s3 uri {s3_uri} is not valid.")
s3_bucket = s3_uri.replace('s3://','').split('/')[0]
print(f"S3 Bucket: {s3_bucket}")
try:
s3.meta.client.head_bucket(Bucket=s3_bucket)
except Exception as e:
raise e
aws_s3_sync(s3_uri, local_path)
return
Penggunaan fungsi pembantu:
#base_s3_uri - user input s3 uri or save to model directory (default)
#curr_host - to save checkpoints of current host
#iteration - current step/epoch during which checkpoint is saved
# save checkpoints on every node using local_rank
if smp.local_rank() == 0:
base_s3_uri = os.path.dirname(os.path.dirname(os.getenv('SM_MODULE_DIR', '')))
curr_host = os.environ['SM_CURRENT_HOST']
full_s3_uri = f'{base_s3_uri}/checkpoints/{curr_host}/{iteration}'
sync_local_checkpoints_to_s3(local_path=checkpoint_dir, s3_uri=full_s3_uri)
Konvergensi Menggunakan Model Paralel dan TensorFlow
Saat Anda menggunakan pelatihan multi-node SageMaker AI dengan TensorFlow dan pustaka paralelisme model, kerugian mungkin tidak menyatu seperti yang diharapkan karena urutan file input pelatihan mungkin berbeda pada setiap node. Ini dapat menyebabkan peringkat yang berbeda dalam grup paralel model yang sama bekerja pada file input yang berbeda, menyebabkan inkonsistensi. Untuk mencegah hal ini, pastikan file input diurutkan dengan cara yang sama di semua peringkat sebelum dikonversi ke TensorFlow kumpulan data. Salah satu cara untuk mencapai ini adalah dengan mengurutkan nama file input dalam skrip pelatihan.
Menghentikan atau Menghancurkan Pekerjaan Pelatihan Terdistribusi
Jika pekerjaan pelatihan Anda mengalami masalah macet, mogok, atau tidak merespons, baca item pemecahan masalah berikut untuk mengidentifikasi penyebab masalah tersebut. Jika Anda membutuhkan dukungan lebih lanjut, hubungi tim pelatihan SageMaker terdistribusi melalui AWS Support
-
Jika Anda melihat pekerjaan pelatihan terdistribusi terhenti pada langkah inisialisasi NCCL, pertimbangkan hal berikut:
-
Jika Anda menggunakan salah satu instans (
ml.p4d
atauml.p3dn
instance) yang mendukung EFA dengan VPC kustom dan subnetnya, pastikan bahwa grup keamanan yang digunakan memiliki koneksi masuk dan keluar untuk semua port ke dan dari SG yang sama. Anda juga umumnya memerlukan koneksi keluar ke IP apa pun sebagai aturan terpisah (untuk akses internet). Untuk menemukan petunjuk tentang cara menambahkan aturan masuk dan keluar untuk komunikasi EFA, lihat. SageMaker AI mendistribusikan pekerjaan pelatihan yang terhenti selama inisialisasi
-
-
Jika Anda melihat pekerjaan pelatihan terdistribusi terhenti saat memeriksa model lengkap, ini mungkin karena
state_dict()
panggilan pada model atau pengoptimal tidak dilakukan di semua peringkat denganrdp_rank()==0
(saat menggunakan paralelisme tensor) ataudp_rank()==0
(saat hanya menggunakan paralelisme pipa). Peringkat ini perlu berkomunikasi untuk membangun pos pemeriksaan untuk diselamatkan. Masalah penghentian serupa juga dapat terjadi saat checkpointing pengoptimal sebagian jika diaktifkan.shard_optimizer_state
Untuk informasi selengkapnya tentang checkpointing model dengan paralelisme model, lihat Instruksi Umum untuk Menyimpan
dan Memuat dan. Checkpointing PyTorch model terdistribusi (untuk pustaka paralelisme SageMaker model antara v1.6.0 dan v1.9.0) -
Jika pekerjaan pelatihan macet dengan kesalahan CUDA Out of Memory, ini berarti bahwa konfigurasi pelatihan terdistribusi perlu disesuaikan agar sesuai dengan model pada cluster GPU. Untuk informasi lebih lanjut dan praktik terbaik, lihatMenyiapkan Konfigurasi yang Tepat untuk Model yang Diberikan.
-
Jika pekerjaan pelatihan macet dengan kesalahan ECC
yang tidak dapat diperbaiki, ini berarti bahwa salah satu GPUs di cluster menjadi buruk. Jika Anda memerlukan dukungan teknis, bagikan pekerjaan ARN dengan AWS tim dan mulai ulang pekerjaan pelatihan Anda dari pos pemeriksaan jika memungkinkan. -
Dalam kasus yang jarang terjadi, konfigurasi pekerjaan yang bekerja sebelumnya tetapi mendekati batas memori GPU mungkin gagal nanti dengan cluster yang berbeda karena kesalahan CUDA Out of Memory. Ini bisa jadi karena beberapa GPU memiliki memori yang tersedia lebih rendah dari biasanya karena kesalahan ECC.
-
Kerusakan batas waktu jaringan mungkin terjadi saat menjalankan pekerjaan multinode yang tidak menggunakan semua GPUs di node. Untuk menyiasatinya, gunakan semua GPUs pada node dengan memastikan bahwa
processes_per_host
parameter diatur ke jumlah GPUs dalam setiap instance. Misalnya, iniprocesses_per_host=8
untukml.p3.16xlarge
,ml.p3dn.24xlarge
, danml.p4d.24xlarge
contoh. -
Jika Anda menemukan bahwa pekerjaan pelatihan Anda membutuhkan waktu lama selama tahap pengunduhan data, pastikan jalur Amazon S3 yang Anda berikan
checkpoint_s3_uri
untuk SageMakerEstimator
kelas tersebut unik untuk pekerjaan pelatihan saat ini. Jika jalur ini digunakan kembali di beberapa pekerjaan pelatihan yang berjalan secara bersamaan, semua pos pemeriksaan tersebut diunggah dan diunduh ke jalur Amazon S3 yang sama dan mungkin secara signifikan meningkatkan waktu pemuatan pos pemeriksaan. -
Gunakan FSx untuk Lustre ketika Anda berurusan dengan data besar dan model.
-
Ketika model pelatihan melebihi 10 miliar parameter, kami sarankan menggunakan Lustre FSx untuk pos pemeriksaan.
-
Setelah Anda membuat sistem file, pastikan untuk menunggu status tersedia sebelum memulai pekerjaan pelatihan menggunakannya.
Menerima Kesalahan NCCL untuk Training Job PyTorch
Jika Anda mengalami kesalahan berikut, mungkin karena proses kehabisan memori GPU.
NCCL error in: ../torch/lib/c10d/ProcessGroupNCCL.cpp:825, unhandled system error, NCCL version 2.7.8
ncclSystemError: System call (socket, malloc, munmap, etc) failed.
Anda dapat mengatasi ini dengan mengurangi ukuran batch atauactive_microbatches
. Jika partisi otomatis tidak menghasilkan partisi yang seimbang, Anda mungkin harus mempertimbangkan partisi manual. Untuk informasi selengkapnya, lihat Paralelisme pipa di seluruh node.
Menerima RecursionError
PyTorch Training Job
Pustaka tidak mendukung pemanggilan super.forward()
di dalam panggilan penerusan modul. Jika Anda menggunakansuper.forward()
, Anda mungkin menerima pesan galat berikut.
RecursionError: maximum recursion depth exceeded
Untuk memperbaiki kesalahan, alih-alih meneleponsuper.forward()
, Anda harus meneleponsuper()._orig_forward()
.