onnxruntime/onnxruntime/python/convert_npz_to_onnx_adapter.py
Dmitri Smirnov d9de054eb5
Multi-Lora support (#22046)
### Description
<!-- Describe your changes. -->



### Motivation and Context
<!-- - Why is this change required? What problem does it solve?
- If it fixes an open issue, please link to the issue here. -->
2024-09-30 15:59:07 -07:00

48 lines
1.5 KiB
Python

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
# This script helps converting .npz files to .onnx_adapter files
import argparse
import os
import sys
import numpy as np
import onnxruntime as ort
def get_args() -> argparse:
parser = argparse.ArgumentParser()
parser.add_argument("--npz_file_path", type=str, required=True)
parser.add_argument("--output_file_path", type=str, required=True)
parser.add_argument("--adapter_version", type=int, required=True)
parser.add_argument("--model_version", type=int, required=True)
return parser.parse_args()
def export_lora_parameters(
npz_file_path: os.PathLike, adapter_version: int, model_version: int, output_file_path: os.PathLike
):
"""The function converts lora parameters in npz to onnx_adapter format"""
adapter_format = ort.AdapterFormat()
adapter_format.set_adapter_version(adapter_version)
adapter_format.set_model_version(model_version)
name_to_ort_value = {}
with np.load(npz_file_path) as data:
for name, np_arr in data.items():
ort_value = ort.OrtValue.ortvalue_from_numpy(np_arr)
name_to_ort_value[name] = ort_value
adapter_format.set_parameters(name_to_ort_value)
adapter_format.export_adapter(output_file_path)
def main() -> int:
args = get_args()
export_lora_parameters(args.npz_file_path, args.adapter_version, args.model_version, args.output_file_path)
return 0
if __name__ == "__main__":
sys.exit(main())