[LLM]Support for linux package (llama, NeoX) & quantize (llama) (#8246)
* temp * update * update * remove cmake * runtime get platform -> change platform name using sed * update * update * add platform flags(default: current platform) & delete legacy libs & add neox quantize
This commit is contained in:
		
							parent
							
								
									350d31a472
								
							
						
					
					
						commit
						91a1528fce
					
				
					 6 changed files with 62 additions and 144 deletions
				
			
		| 
						 | 
					@ -1,58 +0,0 @@
 | 
				
			||||||
cmake_minimum_required(VERSION 3.4...3.22)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
project(bigdl_llm)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
option(FORCE_CMAKE "Force CMake build of Related CPP project" OFF)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set(FORCE_CMAKE $ENV{FORCE_CMAKE})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
add_custom_command(
 | 
					 | 
				
			||||||
    OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/libllama.so ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/quantize
 | 
					 | 
				
			||||||
    COMMAND make libllama.so quantize
 | 
					 | 
				
			||||||
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
add_custom_command(
 | 
					 | 
				
			||||||
    OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/vendor/redpajama.cpp/libgptneox.so ${CMAKE_CURRENT_SOURCE_DIR}/vendor/redpajama.cpp/quantize-gptneox
 | 
					 | 
				
			||||||
    COMMAND make libgptneox.so quantize-gptneox
 | 
					 | 
				
			||||||
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/vendor/redpajama.cpp
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
add_custom_command(
 | 
					 | 
				
			||||||
    OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/vendor/bloomz.cpp/libbloom.so ${CMAKE_CURRENT_SOURCE_DIR}/vendor/bloomz.cpp/quantize
 | 
					 | 
				
			||||||
    COMMAND make libbloom.so quantize
 | 
					 | 
				
			||||||
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/vendor/bloomz.cpp
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
add_custom_target(
 | 
					 | 
				
			||||||
    run ALL
 | 
					 | 
				
			||||||
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/libllama.so
 | 
					 | 
				
			||||||
            ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/quantize
 | 
					 | 
				
			||||||
            ${CMAKE_CURRENT_SOURCE_DIR}/vendor/redpajama.cpp/libgptneox.so
 | 
					 | 
				
			||||||
            ${CMAKE_CURRENT_SOURCE_DIR}/vendor/redpajama.cpp/quantize-gptneox
 | 
					 | 
				
			||||||
            ${CMAKE_CURRENT_SOURCE_DIR}/vendor/bloomz.cpp/libbloom.so
 | 
					 | 
				
			||||||
            ${CMAKE_CURRENT_SOURCE_DIR}/vendor/bloomz.cpp/quantize
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
install(
 | 
					 | 
				
			||||||
    FILES ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/libllama.so
 | 
					 | 
				
			||||||
    DESTINATION src/bigdl/llm/libs
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
install(
 | 
					 | 
				
			||||||
    PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/quantize
 | 
					 | 
				
			||||||
    RENAME quantize-llama
 | 
					 | 
				
			||||||
    DESTINATION src/bigdl/llm/libs
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
install(
 | 
					 | 
				
			||||||
    FILES ${CMAKE_CURRENT_SOURCE_DIR}/vendor/redpajama.cpp/libgptneox.so
 | 
					 | 
				
			||||||
    DESTINATION src/bigdl/llm/libs
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
install(
 | 
					 | 
				
			||||||
    PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/vendor/redpajama.cpp/quantize-gptneox
 | 
					 | 
				
			||||||
    DESTINATION src/bigdl/llm/libs
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
install(
 | 
					 | 
				
			||||||
    FILES ${CMAKE_CURRENT_SOURCE_DIR}/vendor/bloomz.cpp/libbloom.so
 | 
					 | 
				
			||||||
    DESTINATION src/bigdl/llm/libs
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
install(
 | 
					 | 
				
			||||||
    PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/vendor/bloomz.cpp/quantize
 | 
					 | 
				
			||||||
    RENAME quantize-bloomz
 | 
					 | 
				
			||||||
    DESTINATION src/bigdl/llm/libs
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,74 +0,0 @@
 | 
				
			||||||
#!/usr/bin/env 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 os
 | 
					 | 
				
			||||||
import fnmatch
 | 
					 | 
				
			||||||
from skbuild import setup
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
long_description = '''
 | 
					 | 
				
			||||||
    BigDL LLM
 | 
					 | 
				
			||||||
'''
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exclude_patterns = ["*__pycache__*", "*ipynb_checkpoints*"]
 | 
					 | 
				
			||||||
BIGDL_PYTHON_HOME = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 | 
					 | 
				
			||||||
VERSION = open(os.path.join(BIGDL_PYTHON_HOME, 'version.txt'), 'r').read().strip()
 | 
					 | 
				
			||||||
llm_home = os.path.join(os.path.dirname(os.path.abspath(__file__)), "src")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def get_llm_packages():
 | 
					 | 
				
			||||||
    llm_packages = []
 | 
					 | 
				
			||||||
    for dirpath, _, _ in os.walk(os.path.join(llm_home, "bigdl")):
 | 
					 | 
				
			||||||
        print(dirpath)
 | 
					 | 
				
			||||||
        package = dirpath.split(llm_home + os.sep)[1].replace(os.sep, '.')
 | 
					 | 
				
			||||||
        if any(fnmatch.fnmatchcase(package, pat=pattern)
 | 
					 | 
				
			||||||
                for pattern in exclude_patterns):
 | 
					 | 
				
			||||||
            print("excluding", package)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            llm_packages.append(package)
 | 
					 | 
				
			||||||
            print("including", package)
 | 
					 | 
				
			||||||
    return llm_packages
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def setup_package():
 | 
					 | 
				
			||||||
    metadata = dict(
 | 
					 | 
				
			||||||
        name='bigdl-llm',
 | 
					 | 
				
			||||||
        version=VERSION,
 | 
					 | 
				
			||||||
        description='Large Language Model Develop Toolkit',
 | 
					 | 
				
			||||||
        long_description=long_description,
 | 
					 | 
				
			||||||
        long_description_content_type="text/markdown",
 | 
					 | 
				
			||||||
        author='BigDL Authors',
 | 
					 | 
				
			||||||
        author_email='bigdl-user-group@googlegroups.com',
 | 
					 | 
				
			||||||
        license='Apache License, Version 2.0',
 | 
					 | 
				
			||||||
        url='https://github.com/intel-analytics/BigDL',
 | 
					 | 
				
			||||||
        packages=get_llm_packages(),
 | 
					 | 
				
			||||||
        package_dir={"": "src"},
 | 
					 | 
				
			||||||
        install_requires=[""],
 | 
					 | 
				
			||||||
        include_package_data=True,
 | 
					 | 
				
			||||||
        classifiers=[
 | 
					 | 
				
			||||||
            'License :: OSI Approved :: Apache Software License',
 | 
					 | 
				
			||||||
            'Programming Language :: Python :: 3',
 | 
					 | 
				
			||||||
            'Programming Language :: Python :: 3.9',
 | 
					 | 
				
			||||||
            'Programming Language :: Python :: Implementation :: CPython'],
 | 
					 | 
				
			||||||
        platforms=['linux']
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    setup(**metadata)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == '__main__':
 | 
					 | 
				
			||||||
    setup_package()
 | 
					 | 
				
			||||||
| 
						 | 
					@ -16,10 +16,22 @@
 | 
				
			||||||
# limitations under the License.
 | 
					# limitations under the License.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# >> Usage:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# >>>> Build for the current platform:
 | 
				
			||||||
 | 
					# python setup.py clean --all bdist_wheel
 | 
				
			||||||
 | 
					# >>>> Windows:
 | 
				
			||||||
 | 
					# python setup.py clean --all bdist_wheel --win
 | 
				
			||||||
 | 
					# >>>> Linux:
 | 
				
			||||||
 | 
					# python setup.py clean --all bdist_wheel --linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
import fnmatch
 | 
					import fnmatch
 | 
				
			||||||
from setuptools import setup
 | 
					from setuptools import setup
 | 
				
			||||||
import urllib.request
 | 
					import urllib.request
 | 
				
			||||||
 | 
					import platform
 | 
				
			||||||
 | 
					import shutil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
long_description = '''
 | 
					long_description = '''
 | 
				
			||||||
    BigDL LLM
 | 
					    BigDL LLM
 | 
				
			||||||
| 
						 | 
					@ -29,6 +41,7 @@ exclude_patterns = ["*__pycache__*", "*ipynb_checkpoints*"]
 | 
				
			||||||
BIGDL_PYTHON_HOME = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 | 
					BIGDL_PYTHON_HOME = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 | 
				
			||||||
VERSION = open(os.path.join(BIGDL_PYTHON_HOME, 'version.txt'), 'r').read().strip()
 | 
					VERSION = open(os.path.join(BIGDL_PYTHON_HOME, 'version.txt'), 'r').read().strip()
 | 
				
			||||||
llm_home = os.path.join(os.path.dirname(os.path.abspath(__file__)), "src")
 | 
					llm_home = os.path.join(os.path.dirname(os.path.abspath(__file__)), "src")
 | 
				
			||||||
 | 
					libs_dir = os.path.join(llm_home, "bigdl", "llm", "libs")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_llm_packages():
 | 
					def get_llm_packages():
 | 
				
			||||||
| 
						 | 
					@ -45,36 +58,76 @@ def get_llm_packages():
 | 
				
			||||||
    return llm_packages
 | 
					    return llm_packages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lib_urls = [
 | 
					lib_urls = {}
 | 
				
			||||||
 | 
					lib_urls["Windows"] = [
 | 
				
			||||||
    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/llama.dll",
 | 
					    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/llama.dll",
 | 
				
			||||||
    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/quantize-llama.exe",
 | 
					    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/quantize-llama.exe",
 | 
				
			||||||
    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/gptneox.dll",
 | 
					    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/gptneox.dll",
 | 
				
			||||||
    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/quantize-gptneox.exe",
 | 
					    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/quantize-gptneox.exe",
 | 
				
			||||||
    # TODO: add bloomz
 | 
					    # TODO: add bloomz
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					lib_urls["Linux"] = [
 | 
				
			||||||
 | 
					    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/libllama_avx2.so",
 | 
				
			||||||
 | 
					    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/libllama_avx512.so",
 | 
				
			||||||
 | 
					    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/quantize-llama",
 | 
				
			||||||
 | 
					    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/libgptneox_avx2.so",
 | 
				
			||||||
 | 
					    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/libgptneox_avx512.so",
 | 
				
			||||||
 | 
					    "https://sourceforge.net/projects/analytics-zoo/files/bigdl-llm/quantize-gptneox",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def download_libs(url: str):
 | 
					def download_libs(url: str, change_permission=False):
 | 
				
			||||||
    libs_dir = os.path.join(llm_home, "bigdl", "llm", "libs")
 | 
					 | 
				
			||||||
    if not os.path.exists(libs_dir):
 | 
					 | 
				
			||||||
        os.makedirs(libs_dir, exist_ok=True)
 | 
					 | 
				
			||||||
    libso_file_name = url.split('/')[-1]
 | 
					    libso_file_name = url.split('/')[-1]
 | 
				
			||||||
    libso_file = os.path.join(libs_dir, libso_file_name)
 | 
					    libso_file = os.path.join(libs_dir, libso_file_name)
 | 
				
			||||||
    if not os.path.exists(libso_file):
 | 
					    if not os.path.exists(libso_file):
 | 
				
			||||||
 | 
					        print(">> Downloading from ", url)
 | 
				
			||||||
        urllib.request.urlretrieve(url, libso_file)
 | 
					        urllib.request.urlretrieve(url, libso_file)
 | 
				
			||||||
 | 
					        if change_permission:
 | 
				
			||||||
 | 
					            os.chmod(libso_file, 0o775)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setup_package():
 | 
					def setup_package():
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    package_data = [
 | 
					    package_data = {}
 | 
				
			||||||
 | 
					    package_data["Windows"] = [
 | 
				
			||||||
        "libs/llama.dll",
 | 
					        "libs/llama.dll",
 | 
				
			||||||
        "libs/quantize-llama.exe",
 | 
					        "libs/quantize-llama.exe",
 | 
				
			||||||
        "libs/gptneox.dll",
 | 
					        "libs/gptneox.dll",
 | 
				
			||||||
        "libs/quantize-gptneox.exe",
 | 
					        "libs/quantize-gptneox.exe",
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
 | 
					    package_data["Linux"] = [
 | 
				
			||||||
 | 
					        "libs/libllama_avx2.so",
 | 
				
			||||||
 | 
					        "libs/libllama_avx512.so",
 | 
				
			||||||
 | 
					        "libs/quantize-llama",
 | 
				
			||||||
 | 
					        "libs/libgptneox_avx2.so",
 | 
				
			||||||
 | 
					        "libs/libgptneox_avx512.so",
 | 
				
			||||||
 | 
					        "libs/quantize-gptneox",
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for url in lib_urls:
 | 
					    platform_name = None
 | 
				
			||||||
        download_libs(url)
 | 
					    if "--win" in sys.argv:
 | 
				
			||||||
 | 
					        platform_name = "Windows"
 | 
				
			||||||
 | 
					        sys.argv.remove("--win")
 | 
				
			||||||
 | 
					    if "--linux" in sys.argv:
 | 
				
			||||||
 | 
					        platform_name = "Linux"
 | 
				
			||||||
 | 
					        sys.argv.remove("--linux")
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if platform_name is None:
 | 
				
			||||||
 | 
					        if platform.platform().startswith('Windows'):
 | 
				
			||||||
 | 
					            platform_name = "Windows"
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            platform_name = "Linux" 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    change_permission = True if platform_name == "Linux" else False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Delete legacy libs
 | 
				
			||||||
 | 
					    if os.path.exists(libs_dir):
 | 
				
			||||||
 | 
					        print(f"Deleting existing libs_dir {libs_dir} ....")
 | 
				
			||||||
 | 
					        shutil.rmtree(libs_dir)
 | 
				
			||||||
 | 
					    os.makedirs(libs_dir, exist_ok=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for url in lib_urls[platform_name]:
 | 
				
			||||||
 | 
					        download_libs(url, change_permission=change_permission)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    metadata = dict(
 | 
					    metadata = dict(
 | 
				
			||||||
        name='bigdl-llm',
 | 
					        name='bigdl-llm',
 | 
				
			||||||
| 
						 | 
					@ -88,7 +141,7 @@ def setup_package():
 | 
				
			||||||
        url='https://github.com/intel-analytics/BigDL',
 | 
					        url='https://github.com/intel-analytics/BigDL',
 | 
				
			||||||
        packages=get_llm_packages(),
 | 
					        packages=get_llm_packages(),
 | 
				
			||||||
        package_dir={"": "src"},
 | 
					        package_dir={"": "src"},
 | 
				
			||||||
        package_data={"bigdl.llm": package_data},
 | 
					        package_data={"bigdl.llm": package_data[platform_name]},
 | 
				
			||||||
        include_package_data=True,
 | 
					        include_package_data=True,
 | 
				
			||||||
        classifiers=[
 | 
					        classifiers=[
 | 
				
			||||||
            'License :: OSI Approved :: Apache Software License',
 | 
					            'License :: OSI Approved :: Apache Software License',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										1
									
								
								python/llm/vendor/bloomz.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								python/llm/vendor/bloomz.cpp
									
									
									
									
										vendored
									
									
								
							| 
						 | 
					@ -1 +0,0 @@
 | 
				
			||||||
Subproject commit 6d2dee07626b7e8b6af1ada2bfb1bb17de4deaea
 | 
					 | 
				
			||||||
							
								
								
									
										1
									
								
								python/llm/vendor/llama.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								python/llm/vendor/llama.cpp
									
									
									
									
										vendored
									
									
								
							| 
						 | 
					@ -1 +0,0 @@
 | 
				
			||||||
Subproject commit 5026ad5e525e3bb8354d9169aaf9b147ef8b6b85
 | 
					 | 
				
			||||||
							
								
								
									
										1
									
								
								python/llm/vendor/redpajama.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								python/llm/vendor/redpajama.cpp
									
									
									
									
										vendored
									
									
								
							| 
						 | 
					@ -1 +0,0 @@
 | 
				
			||||||
Subproject commit bec989c272fd733d1db1069fb47ad5008ae1cd7e
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in a new issue