From 2fd751de7a67f86b387cc64f921576f78b6066a8 Mon Sep 17 00:00:00 2001 From: Junwei Deng <35031544+TheaperDeng@users.noreply.github.com> Date: Fri, 30 Jun 2023 11:09:50 +0800 Subject: [PATCH] LLM: add a dev tool for getting glibc/glibcxx requirement (#8399) * add a dev tool * pep8 change --- python/llm/dev/print_glib_requirement.py | 85 ++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 python/llm/dev/print_glib_requirement.py diff --git a/python/llm/dev/print_glib_requirement.py b/python/llm/dev/print_glib_requirement.py new file mode 100644 index 00000000..758116f5 --- /dev/null +++ b/python/llm/dev/print_glib_requirement.py @@ -0,0 +1,85 @@ +# +# 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 + 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])