Skip to content

Commit a9b61b2

Browse files
Python: Optional dependencies (microsoft#820)
### Motivation and Context The release of Python SK from 0.2.4 -> 0.2.6 significantly increased the size of the pip package. The dependencies causing this are not core to the kernel, so this PR establishes a pattern for SK connector dependencies (ex: Hugging Face, memory storage) ### Description - Added a poetry group called hugging_face - this is the same name as the connectors namespace in the code. - Added dependency installs to the Hugging Face sample notebook. - removed Hugging Face dependencies from requirements.txt. - Added import errors for torch, transformers, and sentence-transformers in the hugging_face connector classes. - Added command `--with hugging_face` to integration test setup.
1 parent 90f1258 commit a9b61b2

8 files changed

Lines changed: 412 additions & 364 deletions

File tree

.github/workflows/python-integration-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636
run: |
3737
python -m pip install --upgrade pip
3838
python -m pip install poetry pytest
39-
cd python && poetry install
39+
cd python && poetry install --with hugging_face
4040
- name: Run Integration Tests
4141
shell: bash
4242
env: # Set Azure credentials secret as an input

python/DEV_SETUP.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,13 @@ Note: SK requires at least Poetry 1.2.0.
6868
# Install poetry package
6969
pip3 install poetry
7070

71-
# Use poetry to install project deps
71+
# Use poetry to install base project dependencies
7272
poetry install
7373

74+
# If you want to use connectors such as hugging face
75+
# poetry install --with <connector group name>
76+
# example: poetry install --with hugging_face
77+
7478
# Use poetry to activate project venv
7579
poetry shell
7680
```

python/poetry.lock

Lines changed: 375 additions & 346 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

python/pyproject.toml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ python = "^3.8"
1111
numpy = "^1.24.2"
1212
openai = "^0.27.0"
1313
aiofiles = "^23.1.0"
14-
transformers = "^4.28.1"
15-
torch = "^2.0.0"
16-
sentence-transformers = "^2.2.2"
1714

1815
[tool.poetry.group.dev.dependencies]
1916
pre-commit = "^2.21.0"
@@ -23,6 +20,12 @@ pytest = "7.2.0"
2320
ruff = "^0.0.257"
2421
pytest-asyncio = "^0.21.0"
2522

23+
24+
[tool.poetry.group.hugging_face.dependencies]
25+
torch = "^2.0.0"
26+
transformers = "^4.28.1"
27+
sentence-transformers = "^2.2.2"
28+
2629
[tool.isort]
2730
profile = "black"
2831

python/requirements.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
11
openai==0.27.0
22
numpy==1.24.2
3-
aiofiles==23.1.0
4-
transformers==4.28.0
5-
sentence-transformers==2.2.2
6-
torch==2.0.0
3+
aiofiles==23.1.0

python/semantic_kernel/connectors/ai/hugging_face/services/hf_text_completion.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
from logging import Logger
44
from typing import Optional
55

6-
import torch
7-
from transformers import GenerationConfig, pipeline
86

97
from semantic_kernel.connectors.ai.ai_exception import AIException
108
from semantic_kernel.connectors.ai.complete_request_settings import (
@@ -48,10 +46,17 @@ def __init__(
4846
self._model_id = model_id
4947
self._task = "text2text-generation" if task is None else task
5048
self._log = log if log is not None else NullLogger()
49+
50+
try:
51+
import transformers
52+
import torch
53+
except (ImportError, ModuleNotFoundError):
54+
raise ImportError("Please ensure that torch and transformers are installed to use HuggingFaceTextCompletion")
55+
5156
self.device = (
5257
"cuda:" + device if device >= 0 and torch.cuda.is_available() else "cpu"
5358
)
54-
self.generator = pipeline(
59+
self.generator = transformers.pipeline(
5560
task=self._task, model=self._model_id, device=self.device
5661
)
5762

@@ -69,7 +74,8 @@ async def complete_async(
6974
str -- Completion result.
7075
"""
7176
try:
72-
generation_config = GenerationConfig(
77+
import transformers
78+
generation_config = transformers.GenerationConfig(
7379
temperature=request_settings.temperature,
7480
top_p=request_settings.top_p,
7581
max_new_tokens=request_settings.max_tokens,

python/semantic_kernel/connectors/ai/hugging_face/services/hf_text_embedding.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
from logging import Logger
44
from typing import List, Optional
5-
6-
import torch
75
from numpy import array, ndarray
8-
from sentence_transformers import SentenceTransformer
96

107
from semantic_kernel.connectors.ai.ai_exception import AIException
118
from semantic_kernel.connectors.ai.embeddings.embedding_generator_base import (
@@ -38,10 +35,17 @@ def __init__(
3835
"""
3936
self._model_id = model_id
4037
self._log = log if log is not None else NullLogger()
38+
39+
try:
40+
import torch
41+
import sentence_transformers
42+
except (ImportError):
43+
raise ImportError("Please ensure that torch and sentence-transformers are installed to use HuggingFaceTextEmbedding")
44+
4145
self.device = (
4246
"cuda:" + device if device >= 0 and torch.cuda.is_available() else "cpu"
4347
)
44-
self.generator = SentenceTransformer(
48+
self.generator = sentence_transformers.SentenceTransformer(
4549
model_name_or_path=self._model_id, device=self.device
4650
)
4751

samples/notebooks/python/07-hugging-face-for-skills.ipynb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@
2020
"metadata": {},
2121
"outputs": [],
2222
"source": [
23-
"!python -m pip install -r requirements.txt"
23+
"!python -m pip install -r requirements.txt\n",
24+
"\n",
25+
"# Note that additional dependencies are required for the Hugging Face connectors:\n",
26+
"!python -m pip install torch==2.0.0\n",
27+
"!python -m pip install transformers==4.28.1\n",
28+
"!python -m pip install sentence-transformers==2.2.2"
2429
]
2530
},
2631
{

0 commit comments

Comments
 (0)