86 lines
3.2 KiB
Python
86 lines
3.2 KiB
Python
#
|
|
# Copyright 2016 The BigDL Authors.
|
|
#
|
|
# 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 subprocess
|
|
from packaging.version import Version
|
|
import pathlib
|
|
|
|
|
|
SUPPORTED_FAMILIES = ("llama", "bloom", "gptneox", "starcoder")
|
|
|
|
|
|
def _check_version(filename, flag="GLIBC"):
|
|
subfile = None
|
|
if flag == "GLIBC":
|
|
subfile = _check_glibc_version(filename)
|
|
if flag == "GLIBCXX":
|
|
subfile = _check_glibcxx_version(filename)
|
|
max_version = None
|
|
if subfile:
|
|
for version_string in subfile.split():
|
|
try:
|
|
version = Version(version_string.split("_")[1])
|
|
if max_version is None or version > max_version:
|
|
max_version = version
|
|
except Exception:
|
|
pass
|
|
return max_version
|
|
|
|
|
|
def _check_glibc_version(filename):
|
|
cmd = f"strings {filename} | grep -v '@' | grep -v \"GLIBCXX\" | grep GLIBC"
|
|
subfile = subprocess.getoutput(cmd)
|
|
return subfile
|
|
|
|
|
|
def _check_glibcxx_version(filename):
|
|
cmd = f"strings {filename} | grep -v '@' | grep \"GLIBCXX\""
|
|
subfile = subprocess.getoutput(cmd)
|
|
return subfile
|
|
|
|
|
|
if __name__ == "__main__":
|
|
from bigdl import llm
|
|
_base_dir = pathlib.Path(llm.__file__).parent.resolve() / "libs"
|
|
|
|
requirements = {}
|
|
|
|
for family in SUPPORTED_FAMILIES:
|
|
requirements[family] = {}
|
|
avx512_lib_c = _check_version(f"{_base_dir}/lib{family}_avx512.so", flag="GLIBC")
|
|
avx512_main_c = _check_version(f"{_base_dir}/main-{family}_avx512", flag="GLIBC")
|
|
requirements[family]["avx512_glibc"] = max(avx512_lib_c, avx512_main_c)
|
|
|
|
avx512_lib_cxx = _check_version(f"{_base_dir}/lib{family}_avx512.so", flag="GLIBCXX")
|
|
avx512_main_cxx = _check_version(f"{_base_dir}/main-{family}_avx512", flag="GLIBCXX")
|
|
requirements[family]["avx512_glibcxx"] = max(avx512_lib_cxx, avx512_main_cxx)
|
|
|
|
avx2_lib_c = _check_version(f"{_base_dir}/main-{family}_avx2", flag="GLIBC")
|
|
avx2_main_c = _check_version(f"{_base_dir}/lib{family}_avx2.so", flag="GLIBC")
|
|
requirements[family]["avx2_glibc"] = max(avx2_lib_c, avx2_main_c)
|
|
|
|
avx2_lib_cxx = _check_version(f"{_base_dir}/lib{family}_avx2.so", flag="GLIBCXX")
|
|
avx2_main_cxx = _check_version(f"{_base_dir}/main-{family}_avx2", flag="GLIBCXX")
|
|
requirements[family]["avx2_glibcxx"] = max(avx2_lib_cxx, avx2_main_cxx)
|
|
|
|
quantize_c = _check_version(f"{_base_dir}/quantize-{family}", flag="GLIBC")
|
|
quantize_cxx = _check_version(f"{_base_dir}/quantize-{family}", flag="GLIBCXX")
|
|
requirements[family]["quantize_glibc"] = quantize_c
|
|
requirements[family]["quantize_glibcxx"] = quantize_cxx
|
|
|
|
for family in SUPPORTED_FAMILIES:
|
|
print(family)
|
|
print(requirements[family])
|