Topik ini menjelaskan cara menggunakan OSS Python SDK dan OSS Python API untuk membaca serta menulis data di OSS.
Rekomendasi
Untuk mengakses dan memproses set data besar secara sering, daftarkan OSS sebagai set data dan pasang. Untuk akses sementara atau yang bergantung pada logika bisnis Anda, gunakan metode SDK dan API yang dijelaskan dalam topik ini.
Gunakan OSS Python SDK
DSW mencakup paket Python oss2. Ikuti langkah-langkah berikut untuk membaca dan menulis data di OSS.
Autentikasi dan Inisialisasi.
import oss2 auth = oss2.Auth('<your_AccessKey_ID>', '<your_AccessKey_Secret>') bucket = oss2.Bucket(auth, '<your_oss_endpoint>', '<your_bucket_name>')Ganti placeholder berikut dengan nilai sebenarnya Anda:
Parameter
Deskripsi
<your_AccessKey_ID> dan <your_AccessKey_Secret>
ID AccessKey dan Rahasia AccessKey untuk akun Alibaba Cloud Anda. Untuk informasi lebih lanjut, lihat Buat Pasangan Kunci Akses.
<your_oss_endpoint>
Titik akhir dari instans OSS. Pilih titik akhir yang sesuai dengan wilayah instans Anda:
Instans bayar sesuai pemakaian di Wilayah China (Beijing):
oss-cn-beijing.aliyuncs.comInstans langganan di wilayah China (Beijing):
oss-cn-beijing-internal.aliyuncs.comInstans GPU P100 atau CPU di wilayah China (Shanghai):
oss-cn-shanghai.aliyuncs.comInstans GPU M40 di wilayah China (Shanghai):
oss-cn-shanghai-internal.aliyuncs.com
Untuk informasi lebih lanjut, lihat Wilayah dan titik akhir OSS.
<your_bucket_name>
Nama bucket. Jangan sertakan awalan
oss://.Membaca Data dari dan Menulis Data ke OSS.
# Baca file lengkap. result = bucket.get_object('<your_file_path/your_file>') print(result.read()) # Baca data berdasarkan rentang. result = bucket.get_object('<your_file_path/your_file>', byte_range=(0, 99)) # Tulis data ke OSS. bucket.put_object('<your_file_path/your_file>', '<your_object_content>') # Tambahkan data ke file. result = bucket.append_object('<your_file_path/your_file>', 0, '<your_object_content>') result = bucket.append_object('<your_file_path/your_file>', result.next_position, '<your_object_content>')Ganti placeholder berikut dengan nilai sebenarnya Anda:
<your_file_path/your_file>: Jalur ke file yang ingin dibaca atau ditulis.<your_object_content>: Konten yang ingin ditulis atau ditambahkan.
Gunakan OSS Python API
Untuk pengguna PyTorch, DSW menyediakan OSS Python API untuk membaca dan menulis data langsung di OSS.
Anda dapat menyimpan data pelatihan atau model di OSS:
Memuat Data Pelatihan
Simpan data Anda di Bucket OSS dan simpan jalur data serta label yang sesuai dalam file indeks di Bucket yang sama. Dengan membuat kustom
Dataset, Anda dapat menggunakan APIDataLoaderdi PyTorch untuk membaca data secara paralel di beberapa proses. Contoh kode berikut memberikan ilustrasi.import io import oss2 import PIL import torch class OSSDataset(torch.utils.data.dataset.Dataset): def __init__(self, endpoint, bucket, auth, index_file): self._bucket = oss2.Bucket(auth, endpoint, bucket) self._indices = self._bucket.get_object(index_file).read().split(',') def __len__(self): return len(self._indices) def __getitem__(self, index): img_path, label = self._indices(index).strip().split(':') img_str = self._bucket.get_object(img_path) img_buf = io.BytesIO() img_buf.write(img_str.read()) img_buf.seek(0) img = Image.open(img_buf).convert('RGB') img_buf.close() return img, label dataset = OSSDataset(endpoint, bucket, auth, index_file) data_loader = torch.utils.data.DataLoader( dataset, batch_size=batch_size, num_workers=num_loaders, pin_memory=True)Ganti placeholder berikut dengan nilai sebenarnya Anda:
endpoint: Titik akhir OSS.bucket: Nama Bucket.auth: Objek Autentikasi.index_file: Jalur ke file indeks.
CatatanDalam contoh ini, file indeks menggunakan format ini: koma (,) memisahkan sampel, dan titik dua (:) memisahkan jalur sampel dari labelnya.
Simpan atau Muat Model
Anda dapat menggunakan API Python
oss2untuk menyimpan atau memuat model PyTorch. Untuk informasi lebih lanjut tentang menyimpan dan memuat model di PyTorch, lihat PyTorch.Menyimpan Model
from io import BytesIO import torch import oss2 # Tentukan nama Bucket. bucket_name = "<your_bucket_name>" bucket = oss2.Bucket(auth, endpoint, bucket_name) buffer = BytesIO() torch.save(model.state_dict(), buffer) bucket.put_object("<your_model_path>", buffer.getvalue())Ganti placeholder berikut dengan nilai sebenarnya Anda:
auth: Objek Autentikasi.endpoint: Titik akhir OSS.<your_bucket_name>: Nama Bucket OSS, tanpa awalanoss://.<your_model_path>: Jalur tujuan untuk model di dalam bucket.
Memuat Model
from io import BytesIO import torch import oss2 bucket_name = "<your_bucket_name>" bucket = oss2.Bucket(auth, endpoint, bucket_name) buffer = BytesIO(bucket.get_object("<your_model_path>").read()) model.load_state_dict(torch.load(buffer))Ganti placeholder berikut dengan nilai sebenarnya Anda:
auth: Objek Autentikasi.endpoint: Titik akhir OSS.<your_bucket_name>: Nama Bucket OSS, tanpa awalanoss://.<your_model_path>: Jalur model untuk dimuat dari bucket.