Skip to content

Commit 6dd6c89

Browse files
authored
[REFACTOR][Rename] MLC_LLM_SOURCE_DIR and TVM_SOURCE_DIR source directory env (#2378)
* [REFACTOR] Rename use MLC_LLM_SOURCE_DIR for source directory This PR updates to use MLC_LLM_SOURCE_DIR to specify the directory of mlc llm source directory. The reason for this update is that the term XXX_HOME was usually meant to be used in different scenarios in ML frameworks. For example, both torch and huggingface have TORCH_HOME and HF_HOME pointing to their local cache directory. The variable MLC_LLM_SOURCE_DIR is aligned with cmake naming convention (CMAKE_SOURCE_DIR). We will have followup PR to udpate MLC_CACHE_DIR to MLC_LLM_HOME, following the existing practices. * Update env to point to TVM_SOURCE_DIR
1 parent 0724983 commit 6dd6c89

File tree

16 files changed

+74
-72
lines changed

16 files changed

+74
-72
lines changed

CMakeLists.txt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,15 @@ set(USE_PROFILER OFF)
5454
set(USE_GTEST OFF)
5555
set(USE_LIBBACKTRACE OFF)
5656
set(BUILD_DUMMY_LIBTVM ON)
57-
if (NOT DEFINED TVM_HOME)
58-
if(DEFINED ENV{TVM_HOME})
59-
set(TVM_HOME "$ENV{TVM_HOME}")
57+
if (NOT DEFINED TVM_SOURCE_DIR)
58+
if(DEFINED ENV{TVM_SOURCE_DIR})
59+
set(TVM_SOURCE_DIR "$ENV{TVM_SOURCE_DIR}")
6060
else()
61-
set(TVM_HOME 3rdparty/tvm)
62-
endif(DEFINED ENV{TVM_HOME})
63-
endif (NOT DEFINED TVM_HOME)
64-
message(STATUS "TVM_HOME: ${TVM_HOME}")
65-
add_subdirectory(${TVM_HOME} tvm EXCLUDE_FROM_ALL)
61+
set(TVM_SOURCE_DIR 3rdparty/tvm)
62+
endif(DEFINED ENV{TVM_SOURCE_DIR})
63+
endif (NOT DEFINED TVM_SOURCE_DIR)
64+
message(STATUS "TVM_SOURCE_DIR: ${TVM_SOURCE_DIR}")
65+
add_subdirectory(${TVM_SOURCE_DIR} tvm EXCLUDE_FROM_ALL)
6666

6767
set(MLC_LLM_RUNTIME_LINKER_LIB "")
6868
set(TOKENZIER_CPP_PATH 3rdparty/tokenizers-cpp)
@@ -74,10 +74,10 @@ add_library(mlc_llm_objs OBJECT ${MLC_LLM_SRCS})
7474

7575
set(
7676
MLC_LLM_INCLUDES
77-
${TVM_HOME}/include
78-
${TVM_HOME}/3rdparty/dlpack/include
79-
${TVM_HOME}/3rdparty/dmlc-core/include
80-
${TVM_HOME}/3rdparty/picojson
77+
${TVM_SOURCE_DIR}/include
78+
${TVM_SOURCE_DIR}/3rdparty/dlpack/include
79+
${TVM_SOURCE_DIR}/3rdparty/dmlc-core/include
80+
${TVM_SOURCE_DIR}/3rdparty/picojson
8181
)
8282

8383
set(MLC_LLM_COMPILE_DEFS ${MLC_LLM_COMPILE_DEFS} DMLC_USE_LOGGING_LIBRARY=<tvm/runtime/logging.h>)
@@ -100,7 +100,7 @@ target_link_libraries(mlc_llm PRIVATE tokenizers_cpp)
100100

101101
find_library(
102102
FLASH_ATTN_LIBRARY flash_attn
103-
HINTS ${TVM_HOME}/*/3rdparty/libflash_attn/src
103+
HINTS ${TVM_SOURCE_DIR}/*/3rdparty/libflash_attn/src
104104
)
105105

106106
if (FLASH_ATTN_LIBRARY STREQUAL "FLASH_ATTN_LIBRARY-NOTFOUND")

android/mlc4j/CMakeLists.txt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ set(MLC_LLM_BINARY_DIR mlc_llm)
1010
set(MLC_LLM_COMPILE_DEFS TVM_LOG_CUSTOMIZE=1)
1111
add_subdirectory(${MLC_LLM_DIR} ${MLC_LLM_BINARY_DIR} EXCLUDE_FROM_ALL)
1212

13-
if (NOT DEFINED TVM_HOME)
14-
set(TVM_HOME ${MLC_LLM_DIR}/3rdparty/tvm)
15-
endif (NOT DEFINED TVM_HOME)
16-
message(STATUS "TVM_HOME: ${TVM_HOME}")
13+
if (NOT DEFINED TVM_SOURCE_DIR)
14+
set(TVM_SOURCE_DIR ${MLC_LLM_DIR}/3rdparty/tvm)
15+
endif (NOT DEFINED TVM_SOURCE_DIR)
16+
message(STATUS "TVM_SOURCE_DIR: ${TVM_SOURCE_DIR}")
1717

1818
find_package(Java REQUIRED)
1919
find_package(JNI REQUIRED)
@@ -25,29 +25,29 @@ include(UseJava)
2525

2626

2727
file(GLOB_RECURSE javasources
28-
${TVM_HOME}/jvm/core/src/main/java/org/apache/tvm/*.java
28+
${TVM_SOURCE_DIR}/jvm/core/src/main/java/org/apache/tvm/*.java
2929
${ANDROID_DIR}/src/java/*.java
3030
)
3131
set(JNI_HEADER ${CMAKE_BINARY_DIR}/jni_header)
3232
add_jar(tvm4j_core ${javasources} GENERATE_NATIVE_HEADERS tvm4jheaders DESTINATION ${JNI_HEADER})
3333

3434
add_custom_command(
35-
TARGET tvm4j_core POST_BUILD
35+
TARGET tvm4j_core POST_BUILD
3636
COMMAND ${CMAKE_COMMAND} -E copy ${JNI_HEADER}/org_apache_tvm_LibInfo.h ${JNI_HEADER}/org_apache_tvm_native_c_api.h
3737
)
3838

3939
add_library(model_android STATIC IMPORTED)
4040
set_target_properties(model_android PROPERTIES IMPORTED_LOCATION ${ANDROID_BIN_DIR}/lib/libmodel_android.a)
4141

42-
add_library(tvm4j_runtime_packed SHARED ${TVM_HOME}/jvm/native/src/main/native/org_apache_tvm_native_c_api.cc)
42+
add_library(tvm4j_runtime_packed SHARED ${TVM_SOURCE_DIR}/jvm/native/src/main/native/org_apache_tvm_native_c_api.cc)
4343

4444
target_include_directories(tvm4j_runtime_packed PUBLIC
4545
${JNI_INCLUDE_DIRS}
4646
${JNI_HEADER}
4747
${ANDROID_DIR}/src/cpp
48-
${TVM_HOME}/3rdparty/dlpack/include
49-
${TVM_HOME}/3rdparty/dmlc-core/include
50-
${TVM_HOME}/include
48+
${TVM_SOURCE_DIR}/3rdparty/dlpack/include
49+
${TVM_SOURCE_DIR}/3rdparty/dmlc-core/include
50+
${TVM_SOURCE_DIR}/include
5151
)
5252

5353
target_link_libraries(tvm4j_runtime_packed

android/mlc4j/prepare_libs.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ def main(mlc_llm_home: Path):
8181
logger.info('Entering "%s" for MLC LLM and tvm4j build.', os.path.abspath(build_path))
8282
os.chdir(build_path)
8383
# Generate config.cmake if TVM Home is set.
84-
if "TVM_HOME" in os.environ:
85-
logger.info('Set TVM_HOME to "%s"', os.environ["TVM_HOME"])
84+
if "TVM_SOURCE_DIR" in os.environ:
85+
logger.info('Set TVM_SOURCE_DIR to "%s"', os.environ["TVM_SOURCE_DIR"])
8686
with open("config.cmake", "w", encoding="utf-8") as file:
87-
print("set(TVM_HOME ${%s})" % os.environ["TVM_HOME"], file=file)
87+
print("set(TVM_SOURCE_DIR ${%s})" % os.environ["TVM_SOURCE_DIR"], file=file)
8888

8989
# - Run cmake, build and install
9090
run_cmake(mlc_llm_home / "android" / "mlc4j")
@@ -98,11 +98,11 @@ def main(mlc_llm_home: Path):
9898
parser.add_argument(
9999
"--mlc-llm-home",
100100
type=Path,
101-
default=os.environ.get("MLC_LLM_HOME", None),
101+
default=os.environ.get("MLC_LLM_SOURCE_DIR", None),
102102
help="The path to MLC LLM source",
103103
)
104104
parsed = parser.parse_args()
105105
if parsed.mlc_llm_home is None:
106106
parsed.mlc_llm_home = Path(os.path.abspath(os.path.curdir)).parent.parent
107-
os.environ["MLC_LLM_HOME"] = str(parsed.mlc_llm_home)
107+
os.environ["MLC_LLM_SOURCE_DIR"] = str(parsed.mlc_llm_home)
108108
main(parsed.mlc_llm_home)

ci/task/test_model_compile.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ elif [[ ${GPU} == metal ]]; then
2020
elif [[ ${GPU} == wasm* ]]; then
2121
TARGET=wasm
2222
pip install --pre -U -f https://mlc.ai/wheels mlc-ai-nightly
23-
export TVM_HOME=$(dirname $(python -c 'import tvm; print(tvm.__file__)'))
24-
export MLC_LLM_HOME=$(pwd)
25-
cd $TVM_HOME/web/ && make -j${NUM_THREADS} && cd -
26-
cd $MLC_LLM_HOME/web/ && make -j${NUM_THREADS} && cd -
23+
export TVM_SOURCE_DIR=$(dirname $(python -c 'import tvm; print(tvm.__file__)'))
24+
export MLC_LLM_SOURCE_DIR=$(pwd)
25+
cd $TVM_SOURCE_DIR/web/ && make -j${NUM_THREADS} && cd -
26+
cd $MLC_LLM_SOURCE_DIR/web/ && make -j${NUM_THREADS} && cd -
2727
elif [[ ${GPU} == ios ]]; then
2828
TARGET=ios
2929
pip install --pre -U --force-reinstal -f https://mlc.ai/wheels mlc-ai-nightly

cmake/gen_cmake_config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
tvm_home = "" # pylint: disable=invalid-name
77

88
tvm_home = input(
9-
"Enter TVM_HOME in absolute path. If not specified, 3rdparty/tvm will be used by default: "
9+
"Enter TVM_SOURCE_DIR in absolute path. If not specified, 3rdparty/tvm will be used by default: "
1010
)
1111
if len(tvm_home) == 0:
1212
tvm_home = "3rdparty/tvm" # pylint: disable=invalid-name
1313

14-
cmake_config_str = f"set(TVM_HOME {tvm_home})\n"
14+
cmake_config_str = f"set(TVM_SOURCE_DIR {tvm_home})\n"
1515
cmake_config_str += "set(CMAKE_BUILD_TYPE RelWithDebInfo)\n"
1616
backends = [
1717
Backend("CUDA", "USE_CUDA", "Use CUDA? (y/n): "),

docs/compilation/package_libraries_and_weights.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ After cloning, the basic usage of ``mlc_llm package`` is as the following.
2626

2727
.. code:: bash
2828
29-
export MLC_LLM_HOME=/path/to/mlc-llm
29+
export MLC_LLM_SOURCE_DIR=/path/to/mlc-llm
3030
cd /path/to/app # The app root directory which contains "mlc-package-config.json".
3131
# E.g., "ios/MLCChat" or "android/MLCChat"
3232
mlc_llm package
@@ -200,8 +200,8 @@ Command ``mlc_llm package`` can optionally take the arguments below:
200200

201201
``--mlc-llm-home``
202202
The path to MLC LLM source code (cloned from https://github.com/mlc-ai/mlc-llm).
203-
By default, it is the ``$MLC_LLM_HOME`` environment variable.
204-
If neither ``$MLC_LLM_HOME`` or ``--mlc-llm-home`` is specified, error will be reported.
203+
By default, it is the ``$MLC_LLM_SOURCE_DIR`` environment variable.
204+
If neither ``$MLC_LLM_SOURCE_DIR`` or ``--mlc-llm-home`` is specified, error will be reported.
205205

206206
``--output`` / ``-o``
207207
The output directory of ``mlc_llm package`` command.

docs/deploy/android.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ Please ensure that the JDK versions for Android Studio and JAVA_HOME are the sam
4848

4949
**TVM Unity runtime** is placed under `3rdparty/tvm <https://github.com/mlc-ai/mlc-llm/tree/main/3rdparty>`__ in MLC LLM, so there is no need to install anything extra. Set up the following environment variable:
5050

51-
- ``export TVM_HOME=/path/to/mlc-llm/3rdparty/tvm``.
51+
- ``export TVM_SOURCE_DIR=/path/to/mlc-llm/3rdparty/tvm``.
5252

5353
(Optional) **TVM Unity compiler** Python package (:ref:`install <tvm-unity-prebuilt-package>` or :ref:`build from source <tvm-unity-build-from-source>`). It is *NOT* required if models are prebuilt, but to compile PyTorch models from HuggingFace in the following section, the compiler is a must-dependency.
5454

@@ -63,7 +63,7 @@ Check if **environment variable** are properly set as the last check. One way to
6363
export ANDROID_NDK=... # Android NDK toolchain
6464
export TVM_NDK_CC=... # Android NDK clang
6565
export JAVA_HOME=... # Java
66-
export TVM_HOME=... # TVM Unity runtime
66+
export TVM_SOURCE_DIR=... # TVM Unity runtime
6767
6868
6969
Build Android App from Source
@@ -105,7 +105,7 @@ We have a one-line command to build and prepare all the model libraries:
105105
.. code:: bash
106106
107107
cd /path/to/MLCChat # e.g., "android/MLCChat"
108-
export MLC_LLM_HOME=/path/to/mlc-llm # e.g., "../.."
108+
export MLC_LLM_SOURCE_DIR=/path/to/mlc-llm # e.g., "../.."
109109
mlc_llm package
110110
111111
This command mainly executes the following two steps:

docs/deploy/ios.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ We have a one-line command to build and prepare all the model libraries:
6767
.. code:: bash
6868
6969
cd /path/to/MLCChat # e.g., "ios/MLCChat"
70-
export MLC_LLM_HOME=/path/to/mlc-llm # e.g., "../.."
70+
export MLC_LLM_SOURCE_DIR=/path/to/mlc-llm # e.g., "../.."
7171
mlc_llm package
7272
7373
This command mainly executes the following two steps:

docs/install/emcc.rst

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,20 @@ Validate that emcc is accessible in shell
2121
2222
emcc --version
2323
24-
Step 2: Set TVM_HOME and MLC_LLM_HOME
24+
Step 2: Set TVM_SOURCE_DIR and MLC_LLM_SOURCE_DIR
2525
-------------------------------------
2626

2727
We need to set a path to a tvm source in order to build tvm runtime.
2828
Note that you do not need to build tvm unity from the source. The source here is only used to build the web runtime component.
2929
Set environment variable in your shell startup profile in to point to ``3rdparty/tvm`` (if preferred, you could also
3030
point to your own TVM address if you installed TVM from source).
3131

32-
Besides, we also need to set ``MLC_LLM_HOME`` so that we can locate ``mlc_wasm_runtime.bc`` when compiling a model library wasm.
32+
Besides, we also need to set ``MLC_LLM_SOURCE_DIR`` so that we can locate ``mlc_wasm_runtime.bc`` when compiling a model library wasm.
3333

3434
.. code:: bash
3535
36-
export TVM_HOME=/path/to/3rdparty/tvm
37-
export MLC_LLM_HOME=/path/to/mlc-llm
36+
export TVM_SOURCE_DIR=/path/to/3rdparty/tvm
37+
export MLC_LLM_SOURCE_DIR=/path/to/mlc-llm
3838
3939
4040
Step 3: Prepare Wasm Runtime
@@ -43,25 +43,25 @@ Step 3: Prepare Wasm Runtime
4343
First, we need to obtain a copy of the mlc-llm source code for the setup script
4444

4545
.. code:: bash
46-
46+
4747
git clone https://github.com/mlc-ai/mlc-llm.git --recursive
4848
cd mlc-llm
4949
5050
Now we can prepare wasm runtime using the script in mlc-llm repo
5151

5252
.. code:: bash
53-
53+
5454
./web/prep_emcc_deps.sh
5555
5656
We can then validate the outcome
5757

5858
.. code:: bash
5959
60-
>>> echo ${TVM_HOME}
60+
>>> echo ${TVM_SOURCE_DIR}
6161
6262
/path/set/in/step2
6363
64-
>>> ls -l ${TVM_HOME}/web/dist/wasm/*.bc
64+
>>> ls -l ${TVM_SOURCE_DIR}/web/dist/wasm/*.bc
6565
6666
tvmjs_support.bc
6767
wasm_runtime.bc

docs/install/mlc_llm.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,8 @@ There are two ways to do so:
216216
217217
.. code-tab :: bash Install via environment variable
218218
219-
export MLC_LLM_HOME=/path-to-mlc-llm
220-
export PYTHONPATH=$MLC_LLM_HOME/python:$PYTHONPATH
219+
export MLC_LLM_SOURCE_DIR=/path-to-mlc-llm
220+
export PYTHONPATH=$MLC_LLM_SOURCE_DIR/python:$PYTHONPATH
221221
alias mlc_llm="python -m mlc_llm"
222222
223223
.. code-tab :: bash Install via pip local project

ios/prepare_libs.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ function help {
77
echo -e " -h, --help Prints this help\n"
88
}
99

10-
MLC_LLM_HOME="${MLC_LLM_HOME:-..}"
10+
MLC_LLM_SOURCE_DIR="${MLC_LLM_SOURCE_DIR:-..}"
1111
is_simulator="false"
1212
arch="arm64"
1313

@@ -54,7 +54,7 @@ fi
5454

5555
mkdir -p build/ && cd build/
5656

57-
cmake $MLC_LLM_HOME\
57+
cmake $MLC_LLM_SOURCE_DIR\
5858
-DCMAKE_BUILD_TYPE=$type\
5959
-DCMAKE_SYSTEM_NAME=iOS\
6060
-DCMAKE_SYSTEM_VERSION=14.0\
@@ -72,5 +72,5 @@ cmake --build . --config release --target mlc_llm_static -j
7272
cmake --build . --target install --config release -j
7373
cd ..
7474

75-
rm -rf $MLC_LLM_HOME/ios/MLCSwift/tvm_home
76-
ln -s $MLC_LLM_HOME/3rdparty/tvm $MLC_LLM_HOME/ios/MLCSwift/tvm_home
75+
rm -rf $MLC_LLM_SOURCE_DIR/ios/MLCSwift/tvm_home
76+
ln -s $MLC_LLM_SOURCE_DIR/3rdparty/tvm $MLC_LLM_SOURCE_DIR/ios/MLCSwift/tvm_home

python/mlc_llm/cli/package.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def _parse_package_config(path: Union[str, Path]) -> Path:
2424
return path
2525

2626
def _parse_mlc_llm_home(path: str) -> Path:
27-
os.environ["MLC_LLM_HOME"] = path
27+
os.environ["MLC_LLM_SOURCE_DIR"] = path
2828
return Path(path)
2929

3030
def _parse_output(path: Union[str, Path]) -> Path:
@@ -42,8 +42,8 @@ def _parse_output(path: Union[str, Path]) -> Path:
4242
parser.add_argument(
4343
"--mlc-llm-home",
4444
type=_parse_mlc_llm_home,
45-
default=os.environ.get("MLC_LLM_HOME", None),
46-
help=HELP["mlc_llm_home"] + " (default: the $MLC_LLM_HOME environment variable)",
45+
default=os.environ.get("MLC_LLM_SOURCE_DIR", None),
46+
help=HELP["mlc_llm_home"] + " (default: the $MLC_LLM_SOURCE_DIR environment variable)",
4747
)
4848
parser.add_argument(
4949
"--output",
@@ -58,7 +58,7 @@ def _parse_output(path: Union[str, Path]) -> Path:
5858
"MLC LLM home is not specified. "
5959
"Please obtain a copy of MLC LLM source code by "
6060
"cloning https://github.com/mlc-ai/mlc-llm, and set environment variable "
61-
'"MLC_LLM_HOME=path/to/mlc-llm"'
61+
'"MLC_LLM_SOURCE_DIR=path/to/mlc-llm"'
6262
)
6363
package(
6464
package_config_path=parsed.package_config,

python/mlc_llm/support/auto_target.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,15 +220,15 @@ def build(mod: IRModule, args: "CompileArgs", pipeline=None):
220220
# Try to locate `mlc_wasm_runtime.bc`
221221
bc_path = None
222222
bc_candidates = ["web/dist/wasm/mlc_wasm_runtime.bc"]
223-
if os.environ.get("MLC_LLM_HOME", None):
224-
mlc_source_home_dir = os.environ["MLC_LLM_HOME"]
223+
if os.environ.get("MLC_LLM_SOURCE_DIR", None):
224+
mlc_source_home_dir = os.environ["MLC_LLM_SOURCE_DIR"]
225225
bc_candidates.append(
226226
os.path.join(mlc_source_home_dir, "web", "dist", "wasm", "mlc_wasm_runtime.bc")
227227
)
228228
error_info = (
229229
"Cannot find library: mlc_wasm_runtime.bc\n"
230230
+ "Make sure you have run `./web/prep_emcc_deps.sh` and "
231-
+ "`export MLC_LLM_HOME=/path/to/mlc-llm` so that we can locate the file. "
231+
+ "`export MLC_LLM_SOURCE_DIR=/path/to/mlc-llm` so that we can locate the file. "
232232
+ "We tried to look at candidate paths:\n"
233233
)
234234
for candidate in bc_candidates:

rust/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ To set up the MLC-LLM Rust package, please follow these steps:
99

1010
**Step 2:** Define the environment variables for TVM and MLC-LLM by running the following commands in your terminal:
1111
```bash
12-
export TVM_HOME=/path/to/tvm
12+
export TVM_SOURCE_DIR=/path/to/tvm
1313
export MLC_HOME=/path/to/mlc-llm
1414
```
1515

web/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# specific language governing permissions and limitations
1616
# under the License.
1717

18-
TVM_ROOT=$(TVM_HOME)
18+
TVM_ROOT=$(TVM_SOURCE_DIR)
1919
MLC_LLM_ROOT=$(shell cd ..; pwd)
2020

2121
INCLUDE_FLAGS = -I$(TVM_ROOT) -I$(TVM_ROOT)/include\

0 commit comments

Comments
 (0)