optimum/commands/env.py (74 lines of code) (raw):

# Copyright 2024 The HuggingFace 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. import platform import subprocess from typing import Dict, List, Optional import huggingface_hub from pkg_resources import get_distribution from transformers import __version__ as transformers_version from transformers.utils import is_torch_available from ..neuron.utils import is_neuron_available, is_neuronx_available from ..neuron.version import __sdk_version__ as neuron_sdk_version from ..neuron.version import __version__ as optimum_neuron_version from ..version import __version__ as optimum_version from . import BaseOptimumCLICommand, CommandInfo class EnvironmentCommand(BaseOptimumCLICommand): COMMAND = CommandInfo(name="env", help="Get information about the environment used.") @staticmethod def format_dict(d): return "\n".join([f"- {prop}: {val}" for prop, val in d.items()]) + "\n" @staticmethod def get_pip_pkgs_version(pkg_list: Optional[List], info: Dict): if pkg_list is not None: for pkg in pkg_list: try: num_version = get_distribution(pkg).version except Exception: num_version = "NA" info[f"`{pkg}` version"] = num_version return info @staticmethod def print_apt_pkgs(): apt = subprocess.Popen(["apt", "list", "--installed"], stdout=subprocess.PIPE) grep = subprocess.Popen(["grep", "aws-neuron"], stdin=apt.stdout, stdout=subprocess.PIPE) pkgs_list = list(grep.stdout) for pkg in pkgs_list: print(pkg.decode("utf-8").split("\n")[0]) def run(self): pt_version = "not installed" if is_torch_available(): import torch pt_version = torch.__version__ platform_info = { "Platform": platform.platform(), "Python version": platform.python_version(), } info = { "`optimum-neuron` version": optimum_neuron_version, "`neuron-sdk` version": neuron_sdk_version, "`optimum` version": optimum_version, "`transformers` version": transformers_version, "`huggingface_hub` version": huggingface_hub.__version__, "`torch` version": f"{pt_version}", } if is_neuron_available(): neuron_python_pkgs = ["dmlc-tvm", "neuron-cc", "torch-neuron"] elif is_neuronx_available(): neuron_python_pkgs = [ "aws-neuronx-runtime-discovery", "libneuronxla", "neuronx-cc", "neuronx-distributed", "neuronx-hwm", "torch-neuronx", "torch-xla", "transformers-neuronx", ] else: neuron_python_pkgs = None info = self.get_pip_pkgs_version(neuron_python_pkgs, info) print("\nCopy-and-paste the text below in your GitHub issue:\n") print("\nPlatform:\n") print(self.format_dict(platform_info)) print("\nPython packages:\n") print(self.format_dict(info)) print("\nNeuron Driver:\n") self.print_apt_pkgs()