Skip to content

Commit 048a123

Browse files
Refactor model venv support (#2954)
* Refactor model venv creation * Update assertion error message --------- Co-authored-by: Ankith Gunapal <[email protected]>
1 parent ccc3f95 commit 048a123

File tree

2 files changed

+13
-57
lines changed

2 files changed

+13
-57
lines changed

frontend/server/src/main/java/org/pytorch/serve/wlm/ModelManager.java

+4-54
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,10 @@ private void setupModelVenv(Model model)
218218
File venvPath = EnvironmentUtils.getPythonVenvPath(model);
219219
List<String> commandParts = new ArrayList<>();
220220
commandParts.add(configManager.getPythonExecutable());
221-
commandParts.add("-m");
222-
commandParts.add("venv");
223-
commandParts.add("--clear");
221+
commandParts.add(
222+
Paths.get(configManager.getModelServerHome(), "ts", "utils", "setup_model_venv.py")
223+
.toAbsolutePath()
224+
.toString());
224225
commandParts.add(venvPath.toString());
225226

226227
ProcessBuilder processBuilder = new ProcessBuilder(commandParts);
@@ -272,57 +273,6 @@ private void setupModelVenv(Model model)
272273
throw new ModelException(
273274
"Virtual environment creation failed for model " + model.getModelName());
274275
}
275-
276-
// Inherit site-packages directories from the current environment torchserve is running in
277-
// to the newly created virtual environment
278-
commandParts.clear();
279-
commandParts.add(configManager.getPythonExecutable());
280-
commandParts.add(
281-
Paths.get(
282-
configManager.getModelServerHome(),
283-
"ts",
284-
"utils",
285-
"inherit_site_packages.py")
286-
.toAbsolutePath()
287-
.toString());
288-
commandParts.add(venvPath.toString());
289-
290-
processBuilder = new ProcessBuilder(commandParts);
291-
processBuilder.directory(venvPath.getParentFile());
292-
environment = processBuilder.environment();
293-
envp =
294-
EnvironmentUtils.getEnvString(
295-
configManager.getModelServerHome(),
296-
model.getModelDir().getAbsolutePath(),
297-
null);
298-
for (String envVar : envp) {
299-
String[] parts = envVar.split("=", 2);
300-
if (parts.length == 2) {
301-
environment.put(parts[0], parts[1]);
302-
}
303-
}
304-
processBuilder.redirectErrorStream(true);
305-
process = processBuilder.start();
306-
exitCode = process.waitFor();
307-
brdr = new BufferedReader(new InputStreamReader(process.getInputStream()));
308-
outputString.setLength(0);
309-
while ((line = brdr.readLine()) != null) {
310-
outputString.append(line + "\n");
311-
}
312-
313-
if (exitCode == 0) {
314-
logger.debug(
315-
"Inherited site-packages directories to venv {}:\n{}",
316-
venvPath.toString(),
317-
outputString.toString());
318-
} else {
319-
logger.error(
320-
"Failed to inherit site-packages directories to venv {}:\n{}",
321-
venvPath.toString(),
322-
outputString.toString());
323-
throw new ModelException(
324-
"Failed to inherit site-packages directories to venv " + venvPath.toString());
325-
}
326276
}
327277

328278
private void setupModelDependencies(Model model)

ts/utils/inherit_site_packages.py ts/utils/setup_model_venv.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1-
# This script enables the virtual environment that is passed in as an argument to inherit
2-
# site-packages directories of the environment from which this script is run
1+
# This script enables creation of the model virtual environment whose path is passed in as an argument.
2+
# The virtual environment inherits the site-packages directories of the environment from which this script is run.
33

44
import glob
55
import os
66
import site
77
import sys
8+
import venv
9+
10+
11+
def create_venv(venv_path):
12+
venv.create(venv_path, clear=True, with_pip=True)
813

914

1015
def inherit_site_packages(venv_path):
@@ -41,5 +46,6 @@ def inherit_site_packages(venv_path):
4146
if __name__ == "__main__":
4247
assert (
4348
len(sys.argv) == 2
44-
), f"{__file__} expects one argument: path to venv that should inherit site-packages of the current environment but got {sys.argv}"
49+
), f"{__file__} expects one argument: path to venv that should be created, but got {sys.argv}"
50+
create_venv(sys.argv[1])
4551
inherit_site_packages(sys.argv[1])

0 commit comments

Comments
 (0)