Mempersiapkan dan menjalankan pekerjaan pelatihan dengan SageMaker Profiler - Amazon SageMaker

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mempersiapkan dan menjalankan pekerjaan pelatihan dengan SageMaker Profiler

Menyiapkan untuk menjalankan pekerjaan pelatihan dengan SageMaker Profiler terdiri dari dua langkah: mengadaptasi skrip pelatihan dan mengonfigurasi peluncur pekerjaan SageMaker pelatihan.

Langkah 1: Sesuaikan skrip pelatihan Anda menggunakan modul SageMaker Profiler Python

Untuk mulai menangkap kernel berjalan GPUs saat tugas pelatihan sedang berjalan, modifikasi skrip pelatihan Anda menggunakan modul SageMaker Profiler Python. Impor pustaka start_profiling() dan tambahkan stop_profiling() metode dan untuk menentukan awal dan akhir pembuatan profil. Anda juga dapat menggunakan anotasi kustom opsional untuk menambahkan penanda dalam skrip pelatihan untuk memvisualisasikan aktivitas perangkat keras selama operasi tertentu di setiap langkah.

Perhatikan bahwa annotator mengekstrak operasi dari. GPUs Untuk operasi pembuatan profil diCPUs, Anda tidak perlu menambahkan anotasi tambahan apa pun. CPUpembuatan profil juga diaktifkan saat Anda menentukan konfigurasi profil, yang akan Anda praktikkan. Langkah 2: Buat estimator SageMaker kerangka kerja dan aktifkan SageMaker Profiler

catatan

Membuat profil seluruh pekerjaan pelatihan bukanlah penggunaan sumber daya yang paling efisien. Kami merekomendasikan pembuatan profil paling banyak 300 langkah pekerjaan pelatihan.

penting

Rilis pada 14 Desember 2023 melibatkan perubahan besar. Nama paket SageMaker Profiler Python diubah smppy dari menjadi. smprof Ini efektif dalam SageMaker Framework Containers untuk TensorFlow v2.12 dan yang lebih baru.

Jika Anda menggunakan salah satu versi sebelumnya dari SageMaker Framework Containers seperti TensorFlow v2.11.0, paket Profiler SageMaker Python masih tersedia sebagai. smppy Jika Anda tidak yakin tentang versi atau nama paket mana yang harus Anda gunakan, ganti pernyataan impor paket SageMaker Profiler dengan cuplikan kode berikut.

try: import smprof except ImportError: # backward-compatability for TF 2.11 and PT 1.13.1 images import smppy as smprof

Pendekatan 1. Gunakan pengelola konteks smprof.annotate untuk membubuhi keterangan fungsi lengkap

Anda dapat membungkus fungsi penuh dengan manajer smprof.annotate() konteks. Pembungkus ini direkomendasikan jika Anda ingin membuat profil berdasarkan fungsi alih-alih baris kode. Contoh skrip berikut menunjukkan bagaimana menerapkan manajer konteks untuk membungkus loop pelatihan dan fungsi penuh di setiap iterasi.

import smprof SMProf = smprof.SMProfiler.instance() config = smprof.Config() config.profiler = { "EnableCuda": "1", } SMProf.configure(config) SMProf.start_profiling() for epoch in range(args.epochs): if world_size > 1: sampler.set_epoch(epoch) tstart = time.perf_counter() for i, data in enumerate(trainloader, 0): with smprof.annotate("step_"+str(i)): inputs, labels = data inputs = inputs.to("cuda", non_blocking=True) labels = labels.to("cuda", non_blocking=True) optimizer.zero_grad() with smprof.annotate("Forward"): outputs = net(inputs) with smprof.annotate("Loss"): loss = criterion(outputs, labels) with smprof.annotate("Backward"): loss.backward() with smprof.annotate("Optimizer"): optimizer.step() SMProf.stop_profiling()

Pendekatan 2. Gunakan smprof.annotation_begin() dan smprof.annotation_end() untuk membubuhi keterangan baris kode tertentu dalam fungsi

Anda juga dapat menentukan anotasi untuk membuat profil baris kode tertentu. Anda dapat mengatur titik awal dan titik akhir pembuatan profil yang tepat pada tingkat baris kode individual, bukan oleh fungsinya. Misalnya, dalam skrip berikut, step_annotator didefinisikan pada awal setiap iterasi dan berakhir pada akhir iterasi. Sementara itu, anotator rinci lainnya untuk setiap operasi didefinisikan dan membungkus operasi target di setiap iterasi.

import smprof SMProf = smprof.SMProfiler.instance() config = smprof.Config() config.profiler = { "EnableCuda": "1", } SMProf.configure(config) SMProf.start_profiling() for epoch in range(args.epochs): if world_size > 1: sampler.set_epoch(epoch) tstart = time.perf_counter() for i, data in enumerate(trainloader, 0): step_annotator = smprof.annotation_begin("step_" + str(i)) inputs, labels = data inputs = inputs.to("cuda", non_blocking=True) labels = labels.to("cuda", non_blocking=True) optimizer.zero_grad() forward_annotator = smprof.annotation_begin("Forward") outputs = net(inputs) smprof.annotation_end(forward_annotator) loss_annotator = smprof.annotation_begin("Loss") loss = criterion(outputs, labels) smprof.annotation_end(loss_annotator) backward_annotator = smprof.annotation_begin("Backward") loss.backward() smprof.annotation_end(backward_annotator) optimizer_annotator = smprof.annotation_begin("Optimizer") optimizer.step() smprof.annotation_end(optimizer_annotator) smprof.annotation_end(step_annotator) SMProf.stop_profiling()

Setelah membuat anotasi dan menyiapkan modul inisiasi profiler, simpan skrip untuk dikirimkan menggunakan peluncur pekerjaan SageMaker pelatihan di Langkah 2 berikut. Peluncur sampel mengasumsikan bahwa skrip pelatihan diberi nama. train_with_profiler_demo.py

Langkah 2: Buat estimator SageMaker kerangka kerja dan aktifkan SageMaker Profiler

Prosedur berikut menunjukkan bagaimana mempersiapkan estimator SageMaker kerangka kerja untuk pelatihan menggunakan SageMaker PythonSDK.

  1. Siapkan profiler_config objek menggunakan ProfilerConfig dan Profiler modul sebagai berikut.

    from sagemaker import ProfilerConfig, Profiler profiler_config = ProfilerConfig( profile_params = Profiler(cpu_profiling_duration=3600) )

    Berikut ini adalah deskripsi Profiler modul dan argumennya.

    • Profiler: Modul untuk mengaktifkan SageMaker Profiler dengan pekerjaan pelatihan.

      • cpu_profiling_duration(int): Tentukan durasi waktu dalam hitungan detik untuk pembuatan profil. CPUs Defaultnya adalah 3600 detik.

  2. Buat estimator SageMaker kerangka kerja dengan profiler_config objek yang dibuat pada langkah sebelumnya. Kode berikut menunjukkan contoh membuat PyTorch estimator. Jika Anda ingin membuat TensorFlow estimator, impor sagemaker.tensorflow.TensorFlow sebagai gantinya, dan tentukan salah satu TensorFlowversi yang didukung oleh SageMaker Profiler. Untuk informasi selengkapnya tentang kerangka kerja dan jenis instance yang didukung, lihatSageMaker gambar kerangka pra-instal dengan Profiler SageMaker .

    import sagemaker from sagemaker.pytorch import PyTorch estimator = PyTorch( framework_version="2.0.0", role=sagemaker.get_execution_role(), entry_point="train_with_profiler_demo.py", # your training job entry point source_dir=source_dir, # source directory for your training script output_path=output_path, base_job_name="sagemaker-profiler-demo", hyperparameters=hyperparameters, # if any instance_count=1, # Recommended to test with < 8 instance_type=ml.p4d.24xlarge, profiler_config=profiler_config )
  3. Mulai pekerjaan pelatihan dengan menjalankan fit metode. Denganwait=False, Anda dapat membungkam log pekerjaan pelatihan dan membiarkannya berjalan di latar belakang.

    estimator.fit(wait=False)

Saat menjalankan pekerjaan pelatihan atau setelah pekerjaan selesai, Anda dapat pergi ke topik berikutnya di Buka aplikasi UI SageMaker Profiler dan mulai menjelajahi dan memvisualisasikan profil yang disimpan.

Jika Anda ingin langsung mengakses data profil yang disimpan di bucket Amazon S3, gunakan skrip berikut untuk mengambil S3. URI

import os # This is an ad-hoc function to get the S3 URI # to where the profile output data is saved def get_detailed_profiler_output_uri(estimator): config_name = None for processing in estimator.profiler_rule_configs: params = processing.get("RuleParameters", dict()) rule = config_name = params.get("rule_to_invoke", "") if rule == "DetailedProfilerProcessing": config_name = processing.get("RuleConfigurationName") break return os.path.join( estimator.output_path, estimator.latest_training_job.name, "rule-output", config_name, ) print( f"Profiler output S3 bucket: ", get_detailed_profiler_output_uri(estimator) )

(Opsional) Instal paket SageMaker Profiler Python

Untuk menggunakan SageMaker Profiler pada PyTorch atau gambar TensorFlow kerangka kerja yang tidak tercantum dalamSageMaker gambar kerangka pra-instal dengan Profiler SageMaker , atau pada wadah Docker kustom Anda sendiri untuk pelatihan, Anda dapat menginstal SageMaker Profiler dengan menggunakan salah satu file. SageMaker Profiler Python paket file biner

Opsi 1: Instal paket SageMaker Profiler saat meluncurkan pekerjaan pelatihan

Jika Anda ingin menggunakan SageMaker Profiler untuk pekerjaan pelatihan menggunakan PyTorch atau TensorFlow gambar yang tidak tercantumSageMaker gambar kerangka pra-instal dengan Profiler SageMaker , buat requirements.txt file dan temukan di bawah jalur yang Anda tentukan ke source_dir parameter estimator SageMaker kerangka kerja di Langkah 2. Untuk informasi selengkapnya tentang menyiapkan requirements.txt file secara umum, lihat Menggunakan pustaka pihak ketiga dalam dokumentasi SageMaker SDKPython. Dalam requirements.txt file, tambahkan salah satu jalur bucket S3 untuk file. SageMaker Profiler Python paket file biner

# requirements.txt https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl

Opsi 2: Instal paket SageMaker Profiler di wadah Docker khusus Anda

Jika Anda menggunakan wadah Docker khusus untuk pelatihan, tambahkan salah satunya SageMaker Profiler Python paket file biner ke Dockerfile Anda.

# Install the smprof package version compatible with your CUDA version RUN pip install https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl

Untuk panduan menjalankan wadah Docker khusus untuk pelatihan SageMaker secara umum, lihat Mengadaptasi wadah pelatihan Anda sendiri.