PAI-Blade menyediakan fungsi optimize() yang mengintegrasikan optimasi model langsung ke dalam pipeline Python Anda. Masukkan model TensorFlow atau PyTorch, pilih tingkat optimasi dan perangkat target, lalu dapatkan model yang telah dioptimalkan dan siap untuk inferensi.
optimize
def optimize(
model: Any,
optimization_level: str,
device_type: str,
config: Optional[Config] = None,
inputs: Optional[List[str]] = None,
outputs: Optional[List[str]] = None,
input_shapes: Optional[List[List[str]]] = None,
input_ranges: Optional[List[List[str]]] = None,
test_data: List[Dict[str, np.ndarray]] = [],
calib_data: List[Dict[str, np.ndarray]] = [],
custom_ops: List[str] = [],
verbose: bool = False,
) -> Tuple[Any, OptimizeSpec, OptimizeReport]:
passQuick start
Contoh berikut menunjukkan pemanggilan minimal untuk mengoptimalkan TensorFlow SavedModel guna inferensi GPU menggunakan optimasi lossless:
import blade
optimized_model, opt_spec, opt_report = blade.optimize(
model="/path/to/saved_model", # path ke direktori TensorFlow SavedModel
optimization_level="o1", # optimasi lossless: graph rewriting + compilation
device_type="gpu",
)Untuk menggunakan kuantisasi (o2) dengan data kalibrasi:
import blade
import numpy as np
# Siapkan data kalibrasi sebagai daftar argumen feed_dict
calib = [
{"input": np.random.rand(1, 224, 224, 3).astype(np.float32)},
{"input": np.random.rand(1, 224, 224, 3).astype(np.float32)},
]
optimized_model, opt_spec, opt_report = blade.optimize(
model="/path/to/saved_model",
optimization_level="o2", # kuantisasi — memerlukan calib_data
device_type="gpu",
calib_data=calib,
)Parameter
Parameter wajib
| Parameter | Tipe | Deskripsi |
|---|---|---|
model | Multiple types | Model yang akan dioptimalkan. Lihat Supported model formats. |
optimization_level | string | Strategi optimasi. Nilai yang valid (tidak peka huruf besar/kecil): o1, o2. Lihat optimization_level values. |
device_type | string | Perangkat target. Nilai yang valid (tidak peka huruf besar/kecil): gpu, cpu, edge (hanya untuk TensorFlow). |
Parameter opsional
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
inputs | list[string] | None | Nama node input. Jika tidak diatur, PAI-Blade akan menginferensinya secara otomatis. |
outputs | list[string] | None | Nama node output. Jika tidak diatur, PAI-Blade akan menginferensinya secara otomatis. |
input_shapes | list[list[string]] | None | Kemungkinan bentuk tensor input. Meningkatkan optimasi untuk pola bentuk tertentu. Lihat input_shapes format. |
input_ranges | list[list[string]] | None | Rentang nilai tensor input. Lihat input_shapes format. |
test_data | Multiple types | [] | Data uji yang digunakan untuk mengkalibrasi kecepatan eksekusi model. Tipe data sesuai dengan format calib_data. |
calib_data | Multiple types | [] | Data kalibrasi untuk kuantisasi. Wajib ditentukan saat `optimization_level` bernilai `o2`. Tipe data bergantung pada framework model. |
custom_ops | list[string] | [] | Path ke pustaka operator kustom. Tambahkan setiap path pustaka jika model bergantung pada operator kustom. |
verbose | bool | False | Atur ke True untuk mencetak log optimasi terperinci. Berguna untuk mendiagnosis masalah. |
config | blade.Config | None | Pengaturan optimasi lanjutan. Lihat blade.Config. |
Supported model formats
Model TensorFlow menerima:
Objek
GraphDefPath ke file GraphDef PB (
.pbatau.pbtxt)Path ke direktori SavedModel
Model PyTorch menerima:
Objek
torch.nn.ModulePath ke file
torch.nn.Moduleyang diekspor (.pt)
optimization_level values
| Nilai | Strategi | Kapan digunakan |
|---|---|---|
o1 | Optimasi lossless — graph rewriting dan optimasi kompilasi | Gunakan ketika akurasi harus dipertahankan secara eksak. Tidak memerlukan data kalibrasi. Direkomendasikan sebagai titik awal. |
o2 | Kuantisasi | Gunakan ketika Anda menginginkan percepatan inferensi maksimal. Memerlukan calib_data. |
calib_datahanya berlaku ketikaoptimization_levelbernilaio2. Parameter ini tidak berpengaruh untuko1.
input_shapes and input_ranges format
Kedua parameter menggunakan struktur daftar bersarang yang sama: setiap daftar dalam berisi satu nilai per tensor input, dan daftar luar berisi beberapa kelompok bentuk.
input_shapes — setiap elemen berupa string dalam format "<dim1>*<dim2>*...":
# Model tunggal dengan dua input, satu kelompok bentuk
input_shapes = [["1*512", "3*256"]]
# Model tunggal dengan dua input, tiga kelompok bentuk
input_shapes = [
["1*512", "3*256"],
["5*512", "9*256"],
["10*512", "27*256"],
]input_ranges — setiap elemen berupa string yang menentukan rentang menggunakan kurung siku, angka real, atau karakter:
# Model tunggal dengan dua input, satu kelompok rentang
input_ranges = [["[0.1,0.4]", "[a,f]"]]
# Model tunggal dengan dua input, tiga kelompok rentang
input_ranges = [
["[0.1,0.4]", "[a,f]"],
["[1.1,1.4]", "[h,l]"],
["[2.1,2.4]", "[n,z]"],
]calib_data format
Tipe data calib_data (dan test_data) bergantung pada framework model:
| Framework | Tipe | Deskripsi |
|---|---|---|
| TensorFlow | list[dict[string, np.ndarray]] | Daftar argumen feed_dict, satu per sampel kalibrasi |
| PyTorch | list[tuple[torch.tensor, ...]] | Daftar tupel tensor input, satu per sampel kalibrasi |
Nilai kembali
optimize() mengembalikan tupel yang terdiri dari tiga elemen: Tuple[Any, OptimizeSpec, OptimizeReport].
| Posisi | Elemen | Tipe | Deskripsi |
|---|---|---|---|
| 1 | Model yang dioptimalkan | Multiple types | Tipe yang sama dengan model input. Misalnya, jika Anda memberikan direktori TensorFlow SavedModel, objek GraphDef akan dikembalikan. |
| 2 | Ketergantungan eksternal | OptimizeSpec | Variabel lingkungan dan cache kompilasi yang diperlukan agar optimasi berlaku. Terapkan menggunakan pernyataan WITH di Python. Tidak diperlukan saat menggunakan SDK. |
| 3 | Laporan optimasi | OptimizeReport | Detail hasil optimasi. Untuk informasi lebih lanjut, lihat Optimization report. |
blade.Config
Gunakan blade.Config untuk menyesuaikan perilaku optimasi lanjutan. Berikan instans ke parameter config pada optimize().
class Config(ABC):
def __init__(
self,
disable_fp16_accuracy_check: bool = False,
disable_fp16_perf_check: bool = False,
enable_static_shape_compilation_opt: bool = False,
enable_dynamic_shape_compilation_opt: bool = True,
quant_config: Optional[Dict[str, str]] = None,
) -> None:
passContoh:
import blade
config = blade.Config(
enable_static_shape_compilation_opt=True,
quant_config={"weight_adjustment": "true"},
)
optimized_model, opt_spec, opt_report = blade.optimize(
model="/path/to/saved_model",
optimization_level="o2",
device_type="gpu",
calib_data=calib,
config=config,
)Parameter blade.Config
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
disable_fp16_accuracy_check | bool | False | Menentukan apakah verifikasi akurasi dalam optimasi FP16 diaktifkan. False (default): menonaktifkan verifikasi akurasi. True: mengaktifkan verifikasi akurasi. |
disable_fp16_perf_check | bool | False | Menentukan apakah verifikasi performa dalam optimasi FP16 diaktifkan. False (default): menonaktifkan verifikasi performa. True: mengaktifkan verifikasi performa. |
enable_static_shape_compilation_opt | bool | False | Mengaktifkan optimasi kompilasi bentuk statis. Atur ke True jika semua bentuk input tetap pada saat inferensi. |
enable_dynamic_shape_compilation_opt | bool | True | Mengaktifkan optimasi kompilasi bentuk dinamis. Diaktifkan secara default untuk menangani input dengan panjang variabel. |
quant_config | dict[string, string] | None | Pengaturan kuantisasi. Hanya kunci weight_adjustment yang didukung. Atur ke "true" untuk mengurangi kehilangan presisi dengan menyesuaikan parameter model selama kuantisasi, atau "false" untuk menonaktifkannya. |