yingda.chen 3 years ago
parent
commit
d532d45559
11 changed files with 53 additions and 42 deletions
  1. +1
    -1
      docs/source/conf.py
  2. +21
    -20
      modelscope/hub/api.py
  3. +6
    -2
      modelscope/hub/constants.py
  4. +4
    -4
      modelscope/hub/file_download.py
  5. +5
    -4
      modelscope/hub/repository.py
  6. +2
    -1
      modelscope/hub/snapshot_download.py
  7. +2
    -2
      modelscope/models/base.py
  8. +2
    -2
      modelscope/pipelines/builder.py
  9. +2
    -2
      modelscope/pipelines/util.py
  10. +3
    -0
      modelscope/utils/constant.py
  11. +5
    -4
      modelscope/utils/hub.py

+ 1
- 1
docs/source/conf.py View File

@@ -43,7 +43,7 @@ extensions = [
'sphinx.ext.autodoc', 'sphinx.ext.autodoc',
'sphinx.ext.napoleon', 'sphinx.ext.napoleon',
'sphinx.ext.viewcode', 'sphinx.ext.viewcode',
'recommonmark',
'myst_parser',
'sphinx_markdown_tables', 'sphinx_markdown_tables',
'sphinx_copybutton', 'sphinx_copybutton',
] ]


+ 21
- 20
modelscope/hub/api.py View File

@@ -11,8 +11,8 @@ import requests


from modelscope.utils.logger import get_logger from modelscope.utils.logger import get_logger
from ..msdatasets.config import DOWNLOADED_DATASETS_PATH, HUB_DATASET_ENDPOINT from ..msdatasets.config import DOWNLOADED_DATASETS_PATH, HUB_DATASET_ENDPOINT
from ..utils.constant import DownloadMode
from .constants import MODELSCOPE_URL_SCHEME
from ..utils.constant import (DEFAULT_DATASET_REVISION, DEFAULT_MODEL_REVISION,
DownloadMode)
from .errors import (InvalidParameter, NotExistError, datahub_raise_on_error, from .errors import (InvalidParameter, NotExistError, datahub_raise_on_error,
handle_http_response, is_ok, raise_on_error) handle_http_response, is_ok, raise_on_error)
from .utils.utils import get_endpoint, model_id_to_group_owner_name from .utils.utils import get_endpoint, model_id_to_group_owner_name
@@ -35,7 +35,7 @@ class HubApi:
Login with username and password Login with username and password


Args: Args:
username(`str`): user name on modelscope
user_name(`str`): user name on modelscope
password(`str`): password password(`str`): password


Returns: Returns:
@@ -135,7 +135,7 @@ class HubApi:
def get_model( def get_model(
self, self,
model_id: str, model_id: str,
revision: str = 'master',
revision: str = DEFAULT_MODEL_REVISION,
) -> str: ) -> str:
""" """
Get model information at modelscope_hub Get model information at modelscope_hub
@@ -144,7 +144,7 @@ class HubApi:
model_id(`str`): The model id. model_id(`str`): The model id.
revision(`str`): revision of model revision(`str`): revision of model
Returns: Returns:
The model details information.
The model detail information.
Raises: Raises:
NotExistError: If the model is not exist, will throw NotExistError NotExistError: If the model is not exist, will throw NotExistError
<Tip> <Tip>
@@ -207,7 +207,7 @@ class HubApi:


def get_model_files(self, def get_model_files(self,
model_id: str, model_id: str,
revision: Optional[str] = 'master',
revision: Optional[str] = DEFAULT_MODEL_REVISION,
root: Optional[str] = None, root: Optional[str] = None,
recursive: Optional[str] = False, recursive: Optional[str] = False,
use_cookies: Union[bool, CookieJar] = False, use_cookies: Union[bool, CookieJar] = False,
@@ -216,12 +216,12 @@ class HubApi:


Args: Args:
model_id (str): The model id model_id (str): The model id
revision (Optional[str], optional): The branch or tag name. Defaults to 'master'.
revision (Optional[str], optional): The branch or tag name.
root (Optional[str], optional): The root path. Defaults to None. root (Optional[str], optional): The root path. Defaults to None.
recursive (Optional[str], optional): Is recurive list files. Defaults to False.
use_cookies (Union[bool, CookieJar], optional): If is cookieJar, we will use this cookie, if True, will
recursive (Optional[str], optional): Is recursive list files. Defaults to False.
use_cookies (Union[bool, CookieJar], optional): If is cookieJar, we will use this cookie, if True,
will load cookie from local. Defaults to False. will load cookie from local. Defaults to False.
is_snapshot(Optional[bool], optional): when snapshot_download set to True, otherwise False.
headers: request headers


Raises: Raises:
ValueError: If user_cookies is True, but no local cookie. ValueError: If user_cookies is True, but no local cookie.
@@ -258,18 +258,19 @@ class HubApi:
dataset_list = r.json()['Data'] dataset_list = r.json()['Data']
return [x['Name'] for x in dataset_list] return [x['Name'] for x in dataset_list]


def fetch_dataset_scripts(self,
dataset_name: str,
namespace: str,
download_mode: Optional[DownloadMode],
version: Optional[str] = 'master'):
def fetch_dataset_scripts(
self,
dataset_name: str,
namespace: str,
download_mode: Optional[DownloadMode],
revision: Optional[str] = DEFAULT_DATASET_REVISION):
if namespace is None: if namespace is None:
raise ValueError( raise ValueError(
f'Dataset from Hubs.modelscope should have a valid "namespace", but get {namespace}' f'Dataset from Hubs.modelscope should have a valid "namespace", but get {namespace}'
) )
version = version or 'master'
revision = revision or DEFAULT_DATASET_REVISION
cache_dir = os.path.join(DOWNLOADED_DATASETS_PATH, dataset_name, cache_dir = os.path.join(DOWNLOADED_DATASETS_PATH, dataset_name,
namespace, version)
namespace, revision)
download_mode = DownloadMode(download_mode download_mode = DownloadMode(download_mode
or DownloadMode.REUSE_DATASET_IF_EXISTS) or DownloadMode.REUSE_DATASET_IF_EXISTS)
if download_mode == DownloadMode.FORCE_REDOWNLOAD and os.path.exists( if download_mode == DownloadMode.FORCE_REDOWNLOAD and os.path.exists(
@@ -281,7 +282,7 @@ class HubApi:
resp = r.json() resp = r.json()
datahub_raise_on_error(datahub_url, resp) datahub_raise_on_error(datahub_url, resp)
dataset_id = resp['Data']['Id'] dataset_id = resp['Data']['Id']
datahub_url = f'{self.dataset_endpoint}/api/v1/datasets/{dataset_id}/repo/tree?Revision={version}'
datahub_url = f'{self.dataset_endpoint}/api/v1/datasets/{dataset_id}/repo/tree?Revision={revision}'
r = requests.get(datahub_url) r = requests.get(datahub_url)
resp = r.json() resp = r.json()
datahub_raise_on_error(datahub_url, resp) datahub_raise_on_error(datahub_url, resp)
@@ -289,7 +290,7 @@ class HubApi:
if file_list is None: if file_list is None:
raise NotExistError( raise NotExistError(
f'The modelscope dataset [dataset_name = {dataset_name}, namespace = {namespace}, ' f'The modelscope dataset [dataset_name = {dataset_name}, namespace = {namespace}, '
f'version = {version}] dose not exist')
f'version = {revision}] dose not exist')


file_list = file_list['Files'] file_list = file_list['Files']
local_paths = defaultdict(list) local_paths = defaultdict(list)
@@ -297,7 +298,7 @@ class HubApi:
file_path = file_info['Path'] file_path = file_info['Path']
if file_path.endswith('.py'): if file_path.endswith('.py'):
datahub_url = f'{self.dataset_endpoint}/api/v1/datasets/{dataset_id}/repo/files?' \ datahub_url = f'{self.dataset_endpoint}/api/v1/datasets/{dataset_id}/repo/files?' \
f'Revision={version}&Path={file_path}'
f'Revision={revision}&Path={file_path}'
r = requests.get(datahub_url) r = requests.get(datahub_url)
r.raise_for_status() r.raise_for_status()
content = r.json()['Data']['Content'] content = r.json()['Data']['Content']


+ 6
- 2
modelscope/hub/constants.py View File

@@ -11,8 +11,12 @@ LOGGER_NAME = 'ModelScopeHub'


class Licenses(object): class Licenses(object):
APACHE_V2 = 'Apache License 2.0' APACHE_V2 = 'Apache License 2.0'
GPL = 'GPL'
LGPL = 'LGPL'
GPL_V2 = 'GPL-2.0'
GPL_V3 = 'GPL-3.0'
LGPL_V2_1 = 'LGPL-2.1'
LGPL_V3 = 'LGPL-3.0'
AFL_V3 = 'AFL-3.0'
ECL_V2 = 'ECL-2.0'
MIT = 'MIT' MIT = 'MIT'






+ 4
- 4
modelscope/hub/file_download.py View File

@@ -20,6 +20,7 @@ from tqdm import tqdm


from modelscope import __version__ from modelscope import __version__
from modelscope.utils.logger import get_logger from modelscope.utils.logger import get_logger
from ..utils.constant import DEFAULT_MODEL_REVISION
from .api import HubApi, ModelScopeConfig from .api import HubApi, ModelScopeConfig
from .constants import (DEFAULT_MODELSCOPE_GROUP, LOGGER_NAME, from .constants import (DEFAULT_MODELSCOPE_GROUP, LOGGER_NAME,
MODEL_ID_SEPARATOR) MODEL_ID_SEPARATOR)
@@ -35,7 +36,7 @@ logger = get_logger()
def model_file_download( def model_file_download(
model_id: str, model_id: str,
file_path: str, file_path: str,
revision: Optional[str] = 'master',
revision: Optional[str] = DEFAULT_MODEL_REVISION,
cache_dir: Optional[str] = None, cache_dir: Optional[str] = None,
user_agent: Union[Dict, str, None] = None, user_agent: Union[Dict, str, None] = None,
local_files_only: Optional[bool] = False, local_files_only: Optional[bool] = False,
@@ -55,7 +56,7 @@ def model_file_download(
Path of the file to be downloaded, relative to the root of model repo Path of the file to be downloaded, relative to the root of model repo
revision(`str`, *optional*): revision(`str`, *optional*):
revision of the model file to be downloaded. revision of the model file to be downloaded.
Can be any of a branch, tag or commit hash, default to `master`
Can be any of a branch, tag or commit hash
cache_dir (`str`, `Path`, *optional*): cache_dir (`str`, `Path`, *optional*):
Path to the folder where cached files are stored. Path to the folder where cached files are stored.
user_agent (`dict`, `str`, *optional*): user_agent (`dict`, `str`, *optional*):
@@ -120,8 +121,7 @@ def model_file_download(
model_id=model_id, model_id=model_id,
revision=revision, revision=revision,
recursive=True, recursive=True,
use_cookies=False if cookies is None else cookies,
)
use_cookies=False if cookies is None else cookies)


for model_file in model_files: for model_file in model_files:
if model_file['Type'] == 'tree': if model_file['Type'] == 'tree':


+ 5
- 4
modelscope/hub/repository.py View File

@@ -3,6 +3,7 @@ from typing import Optional


from modelscope.hub.errors import GitError, InvalidParameter from modelscope.hub.errors import GitError, InvalidParameter
from modelscope.utils.logger import get_logger from modelscope.utils.logger import get_logger
from ..utils.constant import DEFAULT_MODEL_REVISION
from .api import ModelScopeConfig from .api import ModelScopeConfig
from .git import GitCommandWrapper from .git import GitCommandWrapper
from .utils.utils import get_endpoint from .utils.utils import get_endpoint
@@ -18,7 +19,7 @@ class Repository:
self, self,
model_dir: str, model_dir: str,
clone_from: str, clone_from: str,
revision: Optional[str] = 'master',
revision: Optional[str] = DEFAULT_MODEL_REVISION,
auth_token: Optional[str] = None, auth_token: Optional[str] = None,
git_path: Optional[str] = None, git_path: Optional[str] = None,
): ):
@@ -76,15 +77,15 @@ class Repository:


def push(self, def push(self,
commit_message: str, commit_message: str,
branch: Optional[str] = 'master',
force: Optional[bool] = False):
branch: Optional[str] = DEFAULT_MODEL_REVISION,
force: bool = False):
"""Push local files to remote, this method will do. """Push local files to remote, this method will do.
git add git add
git commit git commit
git push git push
Args: Args:
commit_message (str): commit message commit_message (str): commit message
branch (Optional[str]): which branch to push. Defaults to 'master'.
branch (Optional[str], optional): which branch to push.
force (Optional[bool]): whether to use forced-push. force (Optional[bool]): whether to use forced-push.
""" """
if commit_message is None or not isinstance(commit_message, str): if commit_message is None or not isinstance(commit_message, str):


+ 2
- 1
modelscope/hub/snapshot_download.py View File

@@ -4,6 +4,7 @@ from pathlib import Path
from typing import Dict, Optional, Union from typing import Dict, Optional, Union


from modelscope.utils.logger import get_logger from modelscope.utils.logger import get_logger
from ..utils.constant import DEFAULT_MODEL_REVISION
from .api import HubApi, ModelScopeConfig from .api import HubApi, ModelScopeConfig
from .errors import NotExistError from .errors import NotExistError
from .file_download import (get_file_download_url, http_get_file, from .file_download import (get_file_download_url, http_get_file,
@@ -15,7 +16,7 @@ logger = get_logger()




def snapshot_download(model_id: str, def snapshot_download(model_id: str,
revision: Optional[str] = 'master',
revision: Optional[str] = DEFAULT_MODEL_REVISION,
cache_dir: Union[str, Path, None] = None, cache_dir: Union[str, Path, None] = None,
user_agent: Optional[Union[Dict, str]] = None, user_agent: Optional[Union[Dict, str]] = None,
local_files_only: Optional[bool] = False) -> str: local_files_only: Optional[bool] = False) -> str:


+ 2
- 2
modelscope/models/base.py View File

@@ -7,7 +7,7 @@ from typing import Dict, Optional, Union
from modelscope.hub.snapshot_download import snapshot_download from modelscope.hub.snapshot_download import snapshot_download
from modelscope.models.builder import build_model from modelscope.models.builder import build_model
from modelscope.utils.config import Config from modelscope.utils.config import Config
from modelscope.utils.constant import ModelFile
from modelscope.utils.constant import DEFAULT_MODEL_REVISION, ModelFile
from modelscope.utils.logger import get_logger from modelscope.utils.logger import get_logger


logger = get_logger() logger = get_logger()
@@ -44,7 +44,7 @@ class Model(ABC):
@classmethod @classmethod
def from_pretrained(cls, def from_pretrained(cls,
model_name_or_path: str, model_name_or_path: str,
revision: Optional[str] = 'master',
revision: Optional[str] = DEFAULT_MODEL_REVISION,
*model_args, *model_args,
**kwargs): **kwargs):
""" Instantiate a model from local directory or remote model repo. Note """ Instantiate a model from local directory or remote model repo. Note


+ 2
- 2
modelscope/pipelines/builder.py View File

@@ -6,7 +6,7 @@ from modelscope.hub.snapshot_download import snapshot_download
from modelscope.metainfo import Pipelines from modelscope.metainfo import Pipelines
from modelscope.models.base import Model from modelscope.models.base import Model
from modelscope.utils.config import ConfigDict from modelscope.utils.config import ConfigDict
from modelscope.utils.constant import Tasks
from modelscope.utils.constant import DEFAULT_MODEL_REVISION, Tasks
from modelscope.utils.hub import read_config from modelscope.utils.hub import read_config
from modelscope.utils.registry import Registry, build_from_cfg from modelscope.utils.registry import Registry, build_from_cfg
from .base import Pipeline from .base import Pipeline
@@ -105,7 +105,7 @@ def pipeline(task: str = None,
pipeline_name: str = None, pipeline_name: str = None,
framework: str = None, framework: str = None,
device: int = -1, device: int = -1,
model_revision: Optional[str] = 'master',
model_revision: Optional[str] = DEFAULT_MODEL_REVISION,
**kwargs) -> Pipeline: **kwargs) -> Pipeline:
""" Factory method to build an obj:`Pipeline`. """ Factory method to build an obj:`Pipeline`.




+ 2
- 2
modelscope/pipelines/util.py View File

@@ -5,7 +5,7 @@ from typing import List, Optional, Union
from modelscope.hub.api import HubApi from modelscope.hub.api import HubApi
from modelscope.hub.file_download import model_file_download from modelscope.hub.file_download import model_file_download
from modelscope.utils.config import Config from modelscope.utils.config import Config
from modelscope.utils.constant import ModelFile
from modelscope.utils.constant import DEFAULT_MODEL_REVISION, ModelFile
from modelscope.utils.logger import get_logger from modelscope.utils.logger import get_logger


logger = get_logger() logger = get_logger()
@@ -21,7 +21,7 @@ def is_config_has_model(cfg_file):




def is_official_hub_path(path: Union[str, List], def is_official_hub_path(path: Union[str, List],
revision: Optional[str] = 'master'):
revision: Optional[str] = DEFAULT_MODEL_REVISION):
""" Whether path is an official hub name or a valid local """ Whether path is an official hub name or a valid local
path to official hub directory. path to official hub directory.
""" """


+ 3
- 0
modelscope/utils/constant.py View File

@@ -117,3 +117,6 @@ class Requirements(object):


TENSORFLOW = 'tensorflow' TENSORFLOW = 'tensorflow'
PYTORCH = 'pytorch' PYTORCH = 'pytorch'

DEFAULT_MODEL_REVISION = 'master'
DEFAULT_DATASET_REVISION = 'master'

+ 5
- 4
modelscope/utils/hub.py View File

@@ -10,7 +10,7 @@ from modelscope.hub.constants import Licenses, ModelVisibility
from modelscope.hub.file_download import model_file_download from modelscope.hub.file_download import model_file_download
from modelscope.hub.snapshot_download import snapshot_download from modelscope.hub.snapshot_download import snapshot_download
from modelscope.utils.config import Config from modelscope.utils.config import Config
from modelscope.utils.constant import ModelFile
from modelscope.utils.constant import DEFAULT_MODEL_REVISION, ModelFile
from .logger import get_logger from .logger import get_logger


logger = get_logger(__name__) logger = get_logger(__name__)
@@ -22,7 +22,7 @@ def create_model_if_not_exist(
chinese_name: str, chinese_name: str,
visibility: Optional[int] = ModelVisibility.PUBLIC, visibility: Optional[int] = ModelVisibility.PUBLIC,
license: Optional[str] = Licenses.APACHE_V2, license: Optional[str] = Licenses.APACHE_V2,
revision: Optional[str] = 'master'):
revision: Optional[str] = DEFAULT_MODEL_REVISION):
exists = True exists = True
try: try:
api.get_model(model_id=model_id, revision=revision) api.get_model(model_id=model_id, revision=revision)
@@ -42,12 +42,13 @@ def create_model_if_not_exist(
return True return True




def read_config(model_id_or_path: str, revision: Optional[str] = 'master'):
def read_config(model_id_or_path: str,
revision: Optional[str] = DEFAULT_MODEL_REVISION):
""" Read config from hub or local path """ Read config from hub or local path


Args: Args:
model_id_or_path (str): Model repo name or local directory path. model_id_or_path (str): Model repo name or local directory path.
revision: revision of the model when getting from the hub
Return: Return:
config (:obj:`Config`): config object config (:obj:`Config`): config object
""" """


Loading…
Cancel
Save