optimum/neuron/utils/version_utils.py (84 lines of code) (raw):
# coding=utf-8
# Copyright 2023 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Version utilities."""
from typing import Optional
from packaging import version
from .import_utils import is_neuron_available, is_neuronx_available
_neuronxcc_version: Optional[str] = None
_neuroncc_version: Optional[str] = None
_torch_xla_version: Optional[str] = None
_neuronx_distributed_version: Optional[str] = None
_torch_version: Optional[str] = None
def get_neuronxcc_version() -> str:
global _neuronxcc_version
if _neuronxcc_version is not None:
return _neuronxcc_version
try:
import neuronxcc
except ImportError:
raise ModuleNotFoundError("NeuronX Compiler python package is not installed.")
_neuronxcc_version = neuronxcc.__version__
return _neuronxcc_version
def get_neuroncc_version() -> str:
global _neuroncc_version
if _neuroncc_version is not None:
return _neuroncc_version
try:
import neuroncc
except ImportError:
raise ModuleNotFoundError("Neuron Compiler python package is not installed.")
_neuroncc_version = neuroncc.__version__
return _neuroncc_version
def get_torch_xla_version() -> str:
global _torch_xla_version
if _torch_xla_version is not None:
return _torch_xla_version
try:
import torch_xla
except ImportError:
raise ModuleNotFoundError("`torch_xla` python package is not installed.")
_torch_xla_version = torch_xla.__version__
return _torch_xla_version
def get_neuronx_distributed_version() -> str:
global _neuronx_distributed_version
if _neuronx_distributed_version is not None:
return _neuronx_distributed_version
try:
import neuronx_distributed
except ImportError:
raise ModuleNotFoundError("`neuronx_distributed` python package is not installed.")
_neuronx_distributed_version = neuronx_distributed.__version__
return _neuronx_distributed_version
def get_torch_version() -> str:
global _torch_version
if _torch_version is not None:
return _torch_version
try:
import torch
except ImportError:
raise ModuleNotFoundError("`torch` python package is not installed.")
_torch_version = torch.__version__
return _torch_version
def check_compiler_compatibility(compiler_type: str, compiler_version: str):
if compiler_type == "neuron-cc":
compiler_available_fn = is_neuron_available
installed_compiler_version_fn = get_neuroncc_version
elif compiler_type == "neuronx-cc":
compiler_available_fn = is_neuronx_available
installed_compiler_version_fn = get_neuronxcc_version
else:
raise RuntimeError(f"Pretrained model compiler type {compiler_type} not recognized.")
if not compiler_available_fn():
raise RuntimeError(f"Pretrained model was compiled for {compiler_type}, but {compiler_type} is not installed.")
if version.parse(compiler_version) > version.parse(installed_compiler_version_fn()):
raise RuntimeError(
f"Pretrained model is compiled with {compiler_type}({compiler_version}) newer than current compiler ({installed_compiler_version_fn()}),"
" which may cause runtime incompatibilities."
)
def check_compiler_compatibility_for_stable_diffusion():
if not is_neuronx_available():
raise RuntimeError(
"Stable diffusion models are supported only on neuronx devices (inf2 / trn1), but neuronx-cc is not installed."
)
installed_compiler_version = get_neuronxcc_version()
if version.parse(installed_compiler_version) < version.parse("2.6"):
raise RuntimeError(
f"Stable diffusion models are supported from neuronx-cc 2.6, but you have {installed_compiler_version}, please upgrade it."
)