Add support for additional files - #494

Closed
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs
Closed

Add support for additional files#494
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs

Conversation

@mvsusp

@mvsuspmvsusp commented Nov 16, 2018

Copy link
Copy Markdown
Contributor

Issue #, if available:

Description of changes:

Merge Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your pull request.

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works (if appropriate)
  • I have updated the changelog with a description of my changes (if appropriate)
  • I have updated any necessary documentation (if appropriate)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@mvsuspmvsusp changed the title [WIP] Add support for additional filesAdd support for additional filesNov 16, 2018
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these directories

source_dir (str): Path (absolute or relative) to a directory with any other training
source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's be more explicit and use list[str] for lists. also I'd change it to "A single path"

source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd change this line to "any source code (other than the entry point file) needed for training"

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we include explanation about the structure of how to access each of the directories? i.e. I assume (but am still reading the PR) that it'll be something like:

| base dir from unpacking the tar
| - source dir 1
| - source dir 2
| - etc.

based on reading the docstring, but it'd be good to be explicit about it

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

script (str): Script filename.
directory (str): Directory containing the source file. If it starts with "s3://", no action is taken.
directory (str or None): Directory containing the source file. If it starts with "s3://", no action is taken.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add additional_files to the docstring

source_files = [os.path.join(directory, name) for name in os.listdir(directory)]
key = '%s/sourcedir.tar.gz' % s3_key_prefix

if directory and directory.lower().startswith("s3://"):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

single quotes for the string

Comment threadCHANGELOG.rst Outdated
* feature: HyperparameterTuner: Make input channels optional
* feature: Add support for Chainer 5.0
* feature: Estimator: add support for MetricDefinitions
* feature: source_dir accepts a list of directories

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i still haven't heard an explanation for why this is useful. why can't user just stage their files properly in a single source dir before creating an estimator?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From someone on the outside looking in, this looks confusing and unneeded. I understand there's probably a (pressing) reason why we want to do this - but it feels like a hack that we're adding to the PythonSDK to overcome a problem in another system.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am also against this change because of the same reason Jonathan mentioned.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User could stage the files before calling the estimator. User can also copy their own code to S3, and not use the estimator. Or they could build their own docker container, and make boto calls instead of using the SDK at all. The point of this project is to make things easier.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not independently unit tested. This logic is confusing (I'm not sure I completely understand it). I suggest unit testing this and providing some developer documentation describing the contract.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reviews, I will close this PR for now.

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp closed this Nov 16, 2018
@nadiayanadiaya reopened this Nov 18, 2018
@codecov-io

codecov-io commented Nov 18, 2018

Copy link
Copy Markdown

Codecov Report

Merging #494 into master will decrease coverage by 0.04%.
The diff coverage is 87.87%.

Impacted file tree graph

@@ Coverage Diff @@## master #494 +/- ##
==========================================
- Coverage 94.28% 94.24% -0.05% 
==========================================
Files 59 59 Lines 4551 4567 +16 ==========================================
+ Hits 4291 4304 +13 - Misses 260 263 +3
Impacted FilesCoverage Δ
src/sagemaker/mxnet/estimator.py100% <ø> (ø)⬆️
src/sagemaker/chainer/estimator.py100% <ø> (ø)⬆️
src/sagemaker/pytorch/estimator.py100% <ø> (ø)⬆️
src/sagemaker/fw_utils.py100% <100%> (ø)⬆️
src/sagemaker/model.py93.15% <60%> (-2.51%)⬇️
src/sagemaker/estimator.py89.79% <71.42%> (-0.52%)⬇️
src/sagemaker/tensorflow/estimator.py95.18% <0%> (+0.53%)⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e37ac12...cf52ca8. Read the comment docs.

@mvsuspmvsusp closed this Nov 19, 2018
ChoiByungWook pushed a commit that referenced this pull request Dec 8, 2020
Evan-W-ang added a commit to Evan-W-ang/sagemaker-python-sdk that referenced this pull request Jun 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@mvsusp@codecov-io@leopd@jesterhazy@iquintero@laurenyu@owen-t@nadiaya
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add support for additional files - #494

Closed
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs
Closed

Add support for additional files#494
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs

Conversation

@mvsusp

@mvsuspmvsusp commented Nov 16, 2018

Copy link
Copy Markdown
Contributor

Issue #, if available:

Description of changes:

Merge Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your pull request.

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works (if appropriate)
  • I have updated the changelog with a description of my changes (if appropriate)
  • I have updated any necessary documentation (if appropriate)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@mvsuspmvsusp changed the title [WIP] Add support for additional filesAdd support for additional filesNov 16, 2018
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these directories

source_dir (str): Path (absolute or relative) to a directory with any other training
source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's be more explicit and use list[str] for lists. also I'd change it to "A single path"

source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd change this line to "any source code (other than the entry point file) needed for training"

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we include explanation about the structure of how to access each of the directories? i.e. I assume (but am still reading the PR) that it'll be something like:

| base dir from unpacking the tar
| - source dir 1
| - source dir 2
| - etc.

based on reading the docstring, but it'd be good to be explicit about it

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

script (str): Script filename.
directory (str): Directory containing the source file. If it starts with "s3://", no action is taken.
directory (str or None): Directory containing the source file. If it starts with "s3://", no action is taken.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add additional_files to the docstring

source_files = [os.path.join(directory, name) for name in os.listdir(directory)]
key = '%s/sourcedir.tar.gz' % s3_key_prefix

if directory and directory.lower().startswith("s3://"):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

single quotes for the string

Comment threadCHANGELOG.rst Outdated
* feature: HyperparameterTuner: Make input channels optional
* feature: Add support for Chainer 5.0
* feature: Estimator: add support for MetricDefinitions
* feature: source_dir accepts a list of directories

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i still haven't heard an explanation for why this is useful. why can't user just stage their files properly in a single source dir before creating an estimator?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From someone on the outside looking in, this looks confusing and unneeded. I understand there's probably a (pressing) reason why we want to do this - but it feels like a hack that we're adding to the PythonSDK to overcome a problem in another system.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am also against this change because of the same reason Jonathan mentioned.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User could stage the files before calling the estimator. User can also copy their own code to S3, and not use the estimator. Or they could build their own docker container, and make boto calls instead of using the SDK at all. The point of this project is to make things easier.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not independently unit tested. This logic is confusing (I'm not sure I completely understand it). I suggest unit testing this and providing some developer documentation describing the contract.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reviews, I will close this PR for now.

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp closed this Nov 16, 2018
@nadiayanadiaya reopened this Nov 18, 2018
@codecov-io

codecov-io commented Nov 18, 2018

Copy link
Copy Markdown

Codecov Report

Merging #494 into master will decrease coverage by 0.04%.
The diff coverage is 87.87%.

Impacted file tree graph

@@ Coverage Diff @@## master #494 +/- ##
==========================================
- Coverage 94.28% 94.24% -0.05% 
==========================================
Files 59 59 Lines 4551 4567 +16 ==========================================
+ Hits 4291 4304 +13 - Misses 260 263 +3
Impacted FilesCoverage Δ
src/sagemaker/mxnet/estimator.py100% <ø> (ø)⬆️
src/sagemaker/chainer/estimator.py100% <ø> (ø)⬆️
src/sagemaker/pytorch/estimator.py100% <ø> (ø)⬆️
src/sagemaker/fw_utils.py100% <100%> (ø)⬆️
src/sagemaker/model.py93.15% <60%> (-2.51%)⬇️
src/sagemaker/estimator.py89.79% <71.42%> (-0.52%)⬇️
src/sagemaker/tensorflow/estimator.py95.18% <0%> (+0.53%)⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e37ac12...cf52ca8. Read the comment docs.

@mvsuspmvsusp closed this Nov 19, 2018
ChoiByungWook pushed a commit that referenced this pull request Dec 8, 2020
Evan-W-ang added a commit to Evan-W-ang/sagemaker-python-sdk that referenced this pull request Jun 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@mvsusp@codecov-io@leopd@jesterhazy@iquintero@laurenyu@owen-t@nadiaya
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add support for additional files - #494

Closed
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs
Closed

Add support for additional files#494
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs

Conversation

@mvsusp

@mvsuspmvsusp commented Nov 16, 2018

Copy link
Copy Markdown
Contributor

Issue #, if available:

Description of changes:

Merge Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your pull request.

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works (if appropriate)
  • I have updated the changelog with a description of my changes (if appropriate)
  • I have updated any necessary documentation (if appropriate)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@mvsuspmvsusp changed the title [WIP] Add support for additional filesAdd support for additional filesNov 16, 2018
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these directories

source_dir (str): Path (absolute or relative) to a directory with any other training
source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's be more explicit and use list[str] for lists. also I'd change it to "A single path"

source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd change this line to "any source code (other than the entry point file) needed for training"

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we include explanation about the structure of how to access each of the directories? i.e. I assume (but am still reading the PR) that it'll be something like:

| base dir from unpacking the tar
| - source dir 1
| - source dir 2
| - etc.

based on reading the docstring, but it'd be good to be explicit about it

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

script (str): Script filename.
directory (str): Directory containing the source file. If it starts with "s3://", no action is taken.
directory (str or None): Directory containing the source file. If it starts with "s3://", no action is taken.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add additional_files to the docstring

source_files = [os.path.join(directory, name) for name in os.listdir(directory)]
key = '%s/sourcedir.tar.gz' % s3_key_prefix

if directory and directory.lower().startswith("s3://"):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

single quotes for the string

Comment threadCHANGELOG.rst Outdated
* feature: HyperparameterTuner: Make input channels optional
* feature: Add support for Chainer 5.0
* feature: Estimator: add support for MetricDefinitions
* feature: source_dir accepts a list of directories

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i still haven't heard an explanation for why this is useful. why can't user just stage their files properly in a single source dir before creating an estimator?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From someone on the outside looking in, this looks confusing and unneeded. I understand there's probably a (pressing) reason why we want to do this - but it feels like a hack that we're adding to the PythonSDK to overcome a problem in another system.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am also against this change because of the same reason Jonathan mentioned.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User could stage the files before calling the estimator. User can also copy their own code to S3, and not use the estimator. Or they could build their own docker container, and make boto calls instead of using the SDK at all. The point of this project is to make things easier.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not independently unit tested. This logic is confusing (I'm not sure I completely understand it). I suggest unit testing this and providing some developer documentation describing the contract.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reviews, I will close this PR for now.

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp closed this Nov 16, 2018
@nadiayanadiaya reopened this Nov 18, 2018
@codecov-io

codecov-io commented Nov 18, 2018

Copy link
Copy Markdown

Codecov Report

Merging #494 into master will decrease coverage by 0.04%.
The diff coverage is 87.87%.

Impacted file tree graph

@@ Coverage Diff @@## master #494 +/- ##
==========================================
- Coverage 94.28% 94.24% -0.05% 
==========================================
Files 59 59 Lines 4551 4567 +16 ==========================================
+ Hits 4291 4304 +13 - Misses 260 263 +3
Impacted FilesCoverage Δ
src/sagemaker/mxnet/estimator.py100% <ø> (ø)⬆️
src/sagemaker/chainer/estimator.py100% <ø> (ø)⬆️
src/sagemaker/pytorch/estimator.py100% <ø> (ø)⬆️
src/sagemaker/fw_utils.py100% <100%> (ø)⬆️
src/sagemaker/model.py93.15% <60%> (-2.51%)⬇️
src/sagemaker/estimator.py89.79% <71.42%> (-0.52%)⬇️
src/sagemaker/tensorflow/estimator.py95.18% <0%> (+0.53%)⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e37ac12...cf52ca8. Read the comment docs.

@mvsuspmvsusp closed this Nov 19, 2018
ChoiByungWook pushed a commit that referenced this pull request Dec 8, 2020
Evan-W-ang added a commit to Evan-W-ang/sagemaker-python-sdk that referenced this pull request Jun 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@mvsusp@codecov-io@leopd@jesterhazy@iquintero@laurenyu@owen-t@nadiaya
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add support for additional files - #494

Closed
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs
Closed

Add support for additional files#494
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs

Conversation

@mvsusp

@mvsuspmvsusp commented Nov 16, 2018

Copy link
Copy Markdown
Contributor

Issue #, if available:

Description of changes:

Merge Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your pull request.

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works (if appropriate)
  • I have updated the changelog with a description of my changes (if appropriate)
  • I have updated any necessary documentation (if appropriate)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@mvsuspmvsusp changed the title [WIP] Add support for additional filesAdd support for additional filesNov 16, 2018
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these directories

source_dir (str): Path (absolute or relative) to a directory with any other training
source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's be more explicit and use list[str] for lists. also I'd change it to "A single path"

source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd change this line to "any source code (other than the entry point file) needed for training"

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we include explanation about the structure of how to access each of the directories? i.e. I assume (but am still reading the PR) that it'll be something like:

| base dir from unpacking the tar
| - source dir 1
| - source dir 2
| - etc.

based on reading the docstring, but it'd be good to be explicit about it

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

script (str): Script filename.
directory (str): Directory containing the source file. If it starts with "s3://", no action is taken.
directory (str or None): Directory containing the source file. If it starts with "s3://", no action is taken.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add additional_files to the docstring

source_files = [os.path.join(directory, name) for name in os.listdir(directory)]
key = '%s/sourcedir.tar.gz' % s3_key_prefix

if directory and directory.lower().startswith("s3://"):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

single quotes for the string

Comment threadCHANGELOG.rst Outdated
* feature: HyperparameterTuner: Make input channels optional
* feature: Add support for Chainer 5.0
* feature: Estimator: add support for MetricDefinitions
* feature: source_dir accepts a list of directories

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i still haven't heard an explanation for why this is useful. why can't user just stage their files properly in a single source dir before creating an estimator?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From someone on the outside looking in, this looks confusing and unneeded. I understand there's probably a (pressing) reason why we want to do this - but it feels like a hack that we're adding to the PythonSDK to overcome a problem in another system.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am also against this change because of the same reason Jonathan mentioned.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User could stage the files before calling the estimator. User can also copy their own code to S3, and not use the estimator. Or they could build their own docker container, and make boto calls instead of using the SDK at all. The point of this project is to make things easier.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not independently unit tested. This logic is confusing (I'm not sure I completely understand it). I suggest unit testing this and providing some developer documentation describing the contract.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reviews, I will close this PR for now.

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp closed this Nov 16, 2018
@nadiayanadiaya reopened this Nov 18, 2018
@codecov-io

codecov-io commented Nov 18, 2018

Copy link
Copy Markdown

Codecov Report

Merging #494 into master will decrease coverage by 0.04%.
The diff coverage is 87.87%.

Impacted file tree graph

@@ Coverage Diff @@## master #494 +/- ##
==========================================
- Coverage 94.28% 94.24% -0.05% 
==========================================
Files 59 59 Lines 4551 4567 +16 ==========================================
+ Hits 4291 4304 +13 - Misses 260 263 +3
Impacted FilesCoverage Δ
src/sagemaker/mxnet/estimator.py100% <ø> (ø)⬆️
src/sagemaker/chainer/estimator.py100% <ø> (ø)⬆️
src/sagemaker/pytorch/estimator.py100% <ø> (ø)⬆️
src/sagemaker/fw_utils.py100% <100%> (ø)⬆️
src/sagemaker/model.py93.15% <60%> (-2.51%)⬇️
src/sagemaker/estimator.py89.79% <71.42%> (-0.52%)⬇️
src/sagemaker/tensorflow/estimator.py95.18% <0%> (+0.53%)⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e37ac12...cf52ca8. Read the comment docs.

@mvsuspmvsusp closed this Nov 19, 2018
ChoiByungWook pushed a commit that referenced this pull request Dec 8, 2020
Evan-W-ang added a commit to Evan-W-ang/sagemaker-python-sdk that referenced this pull request Jun 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@mvsusp@codecov-io@leopd@jesterhazy@iquintero@laurenyu@owen-t@nadiaya
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add support for additional files - #494

Closed
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs
Closed

Add support for additional files#494
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs

Conversation

@mvsusp

@mvsuspmvsusp commented Nov 16, 2018

Copy link
Copy Markdown
Contributor

Issue #, if available:

Description of changes:

Merge Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your pull request.

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works (if appropriate)
  • I have updated the changelog with a description of my changes (if appropriate)
  • I have updated any necessary documentation (if appropriate)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@mvsuspmvsusp changed the title [WIP] Add support for additional filesAdd support for additional filesNov 16, 2018
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these directories

source_dir (str): Path (absolute or relative) to a directory with any other training
source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's be more explicit and use list[str] for lists. also I'd change it to "A single path"

source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd change this line to "any source code (other than the entry point file) needed for training"

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we include explanation about the structure of how to access each of the directories? i.e. I assume (but am still reading the PR) that it'll be something like:

| base dir from unpacking the tar
| - source dir 1
| - source dir 2
| - etc.

based on reading the docstring, but it'd be good to be explicit about it

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

script (str): Script filename.
directory (str): Directory containing the source file. If it starts with "s3://", no action is taken.
directory (str or None): Directory containing the source file. If it starts with "s3://", no action is taken.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add additional_files to the docstring

source_files = [os.path.join(directory, name) for name in os.listdir(directory)]
key = '%s/sourcedir.tar.gz' % s3_key_prefix

if directory and directory.lower().startswith("s3://"):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

single quotes for the string

Comment threadCHANGELOG.rst Outdated
* feature: HyperparameterTuner: Make input channels optional
* feature: Add support for Chainer 5.0
* feature: Estimator: add support for MetricDefinitions
* feature: source_dir accepts a list of directories

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i still haven't heard an explanation for why this is useful. why can't user just stage their files properly in a single source dir before creating an estimator?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From someone on the outside looking in, this looks confusing and unneeded. I understand there's probably a (pressing) reason why we want to do this - but it feels like a hack that we're adding to the PythonSDK to overcome a problem in another system.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am also against this change because of the same reason Jonathan mentioned.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User could stage the files before calling the estimator. User can also copy their own code to S3, and not use the estimator. Or they could build their own docker container, and make boto calls instead of using the SDK at all. The point of this project is to make things easier.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not independently unit tested. This logic is confusing (I'm not sure I completely understand it). I suggest unit testing this and providing some developer documentation describing the contract.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reviews, I will close this PR for now.

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp closed this Nov 16, 2018
@nadiayanadiaya reopened this Nov 18, 2018
@codecov-io

codecov-io commented Nov 18, 2018

Copy link
Copy Markdown

Codecov Report

Merging #494 into master will decrease coverage by 0.04%.
The diff coverage is 87.87%.

Impacted file tree graph

@@ Coverage Diff @@## master #494 +/- ##
==========================================
- Coverage 94.28% 94.24% -0.05% 
==========================================
Files 59 59 Lines 4551 4567 +16 ==========================================
+ Hits 4291 4304 +13 - Misses 260 263 +3
Impacted FilesCoverage Δ
src/sagemaker/mxnet/estimator.py100% <ø> (ø)⬆️
src/sagemaker/chainer/estimator.py100% <ø> (ø)⬆️
src/sagemaker/pytorch/estimator.py100% <ø> (ø)⬆️
src/sagemaker/fw_utils.py100% <100%> (ø)⬆️
src/sagemaker/model.py93.15% <60%> (-2.51%)⬇️
src/sagemaker/estimator.py89.79% <71.42%> (-0.52%)⬇️
src/sagemaker/tensorflow/estimator.py95.18% <0%> (+0.53%)⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e37ac12...cf52ca8. Read the comment docs.

@mvsuspmvsusp closed this Nov 19, 2018
ChoiByungWook pushed a commit that referenced this pull request Dec 8, 2020
Evan-W-ang added a commit to Evan-W-ang/sagemaker-python-sdk that referenced this pull request Jun 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@mvsusp@codecov-io@leopd@jesterhazy@iquintero@laurenyu@owen-t@nadiaya
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add support for additional files - #494

Closed
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs
Closed

Add support for additional files#494
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs

Conversation

@mvsusp

@mvsuspmvsusp commented Nov 16, 2018

Copy link
Copy Markdown
Contributor

Issue #, if available:

Description of changes:

Merge Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your pull request.

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works (if appropriate)
  • I have updated the changelog with a description of my changes (if appropriate)
  • I have updated any necessary documentation (if appropriate)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@mvsuspmvsusp changed the title [WIP] Add support for additional filesAdd support for additional filesNov 16, 2018
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these directories

source_dir (str): Path (absolute or relative) to a directory with any other training
source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's be more explicit and use list[str] for lists. also I'd change it to "A single path"

source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd change this line to "any source code (other than the entry point file) needed for training"

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we include explanation about the structure of how to access each of the directories? i.e. I assume (but am still reading the PR) that it'll be something like:

| base dir from unpacking the tar
| - source dir 1
| - source dir 2
| - etc.

based on reading the docstring, but it'd be good to be explicit about it

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

script (str): Script filename.
directory (str): Directory containing the source file. If it starts with "s3://", no action is taken.
directory (str or None): Directory containing the source file. If it starts with "s3://", no action is taken.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add additional_files to the docstring

source_files = [os.path.join(directory, name) for name in os.listdir(directory)]
key = '%s/sourcedir.tar.gz' % s3_key_prefix

if directory and directory.lower().startswith("s3://"):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

single quotes for the string

Comment threadCHANGELOG.rst Outdated
* feature: HyperparameterTuner: Make input channels optional
* feature: Add support for Chainer 5.0
* feature: Estimator: add support for MetricDefinitions
* feature: source_dir accepts a list of directories

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i still haven't heard an explanation for why this is useful. why can't user just stage their files properly in a single source dir before creating an estimator?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From someone on the outside looking in, this looks confusing and unneeded. I understand there's probably a (pressing) reason why we want to do this - but it feels like a hack that we're adding to the PythonSDK to overcome a problem in another system.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am also against this change because of the same reason Jonathan mentioned.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User could stage the files before calling the estimator. User can also copy their own code to S3, and not use the estimator. Or they could build their own docker container, and make boto calls instead of using the SDK at all. The point of this project is to make things easier.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not independently unit tested. This logic is confusing (I'm not sure I completely understand it). I suggest unit testing this and providing some developer documentation describing the contract.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reviews, I will close this PR for now.

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp closed this Nov 16, 2018
@nadiayanadiaya reopened this Nov 18, 2018
@codecov-io

codecov-io commented Nov 18, 2018

Copy link
Copy Markdown

Codecov Report

Merging #494 into master will decrease coverage by 0.04%.
The diff coverage is 87.87%.

Impacted file tree graph

@@ Coverage Diff @@## master #494 +/- ##
==========================================
- Coverage 94.28% 94.24% -0.05% 
==========================================
Files 59 59 Lines 4551 4567 +16 ==========================================
+ Hits 4291 4304 +13 - Misses 260 263 +3
Impacted FilesCoverage Δ
src/sagemaker/mxnet/estimator.py100% <ø> (ø)⬆️
src/sagemaker/chainer/estimator.py100% <ø> (ø)⬆️
src/sagemaker/pytorch/estimator.py100% <ø> (ø)⬆️
src/sagemaker/fw_utils.py100% <100%> (ø)⬆️
src/sagemaker/model.py93.15% <60%> (-2.51%)⬇️
src/sagemaker/estimator.py89.79% <71.42%> (-0.52%)⬇️
src/sagemaker/tensorflow/estimator.py95.18% <0%> (+0.53%)⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e37ac12...cf52ca8. Read the comment docs.

@mvsuspmvsusp closed this Nov 19, 2018
ChoiByungWook pushed a commit that referenced this pull request Dec 8, 2020
Evan-W-ang added a commit to Evan-W-ang/sagemaker-python-sdk that referenced this pull request Jun 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@mvsusp@codecov-io@leopd@jesterhazy@iquintero@laurenyu@owen-t@nadiaya
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add support for additional files - #494

Closed
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs
Closed

Add support for additional files#494
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs

Conversation

@mvsusp

@mvsuspmvsusp commented Nov 16, 2018

Copy link
Copy Markdown
Contributor

Issue #, if available:

Description of changes:

Merge Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your pull request.

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works (if appropriate)
  • I have updated the changelog with a description of my changes (if appropriate)
  • I have updated any necessary documentation (if appropriate)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@mvsuspmvsusp changed the title [WIP] Add support for additional filesAdd support for additional filesNov 16, 2018
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these directories

source_dir (str): Path (absolute or relative) to a directory with any other training
source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's be more explicit and use list[str] for lists. also I'd change it to "A single path"

source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd change this line to "any source code (other than the entry point file) needed for training"

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we include explanation about the structure of how to access each of the directories? i.e. I assume (but am still reading the PR) that it'll be something like:

| base dir from unpacking the tar
| - source dir 1
| - source dir 2
| - etc.

based on reading the docstring, but it'd be good to be explicit about it

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

script (str): Script filename.
directory (str): Directory containing the source file. If it starts with "s3://", no action is taken.
directory (str or None): Directory containing the source file. If it starts with "s3://", no action is taken.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add additional_files to the docstring

source_files = [os.path.join(directory, name) for name in os.listdir(directory)]
key = '%s/sourcedir.tar.gz' % s3_key_prefix

if directory and directory.lower().startswith("s3://"):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

single quotes for the string

Comment threadCHANGELOG.rst Outdated
* feature: HyperparameterTuner: Make input channels optional
* feature: Add support for Chainer 5.0
* feature: Estimator: add support for MetricDefinitions
* feature: source_dir accepts a list of directories

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i still haven't heard an explanation for why this is useful. why can't user just stage their files properly in a single source dir before creating an estimator?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From someone on the outside looking in, this looks confusing and unneeded. I understand there's probably a (pressing) reason why we want to do this - but it feels like a hack that we're adding to the PythonSDK to overcome a problem in another system.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am also against this change because of the same reason Jonathan mentioned.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User could stage the files before calling the estimator. User can also copy their own code to S3, and not use the estimator. Or they could build their own docker container, and make boto calls instead of using the SDK at all. The point of this project is to make things easier.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not independently unit tested. This logic is confusing (I'm not sure I completely understand it). I suggest unit testing this and providing some developer documentation describing the contract.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reviews, I will close this PR for now.

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp closed this Nov 16, 2018
@nadiayanadiaya reopened this Nov 18, 2018
@codecov-io

codecov-io commented Nov 18, 2018

Copy link
Copy Markdown

Codecov Report

Merging #494 into master will decrease coverage by 0.04%.
The diff coverage is 87.87%.

Impacted file tree graph

@@ Coverage Diff @@## master #494 +/- ##
==========================================
- Coverage 94.28% 94.24% -0.05% 
==========================================
Files 59 59 Lines 4551 4567 +16 ==========================================
+ Hits 4291 4304 +13 - Misses 260 263 +3
Impacted FilesCoverage Δ
src/sagemaker/mxnet/estimator.py100% <ø> (ø)⬆️
src/sagemaker/chainer/estimator.py100% <ø> (ø)⬆️
src/sagemaker/pytorch/estimator.py100% <ø> (ø)⬆️
src/sagemaker/fw_utils.py100% <100%> (ø)⬆️
src/sagemaker/model.py93.15% <60%> (-2.51%)⬇️
src/sagemaker/estimator.py89.79% <71.42%> (-0.52%)⬇️
src/sagemaker/tensorflow/estimator.py95.18% <0%> (+0.53%)⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e37ac12...cf52ca8. Read the comment docs.

@mvsuspmvsusp closed this Nov 19, 2018
ChoiByungWook pushed a commit that referenced this pull request Dec 8, 2020
Evan-W-ang added a commit to Evan-W-ang/sagemaker-python-sdk that referenced this pull request Jun 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@mvsusp@codecov-io@leopd@jesterhazy@iquintero@laurenyu@owen-t@nadiaya
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add support for additional files - #494

Closed
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs
Closed

Add support for additional files#494
mvsusp wants to merge 9 commits into
aws:masterfrom
mvsusp:mvs-many-src-dirs

Conversation

@mvsusp

@mvsuspmvsusp commented Nov 16, 2018

Copy link
Copy Markdown
Contributor

Issue #, if available:

Description of changes:

Merge Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your pull request.

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works (if appropriate)
  • I have updated the changelog with a description of my changes (if appropriate)
  • I have updated any necessary documentation (if appropriate)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@mvsuspmvsusp changed the title [WIP] Add support for additional filesAdd support for additional filesNov 16, 2018
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these directories

source_dir (str): Path (absolute or relative) to a directory with any other training
source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's be more explicit and use list[str] for lists. also I'd change it to "A single path"

source code dependencies aside from tne entry point file (default: None). Structure within this
directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd change this line to "any source code (other than the entry point file) needed for training"

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we include explanation about the structure of how to access each of the directories? i.e. I assume (but am still reading the PR) that it'll be something like:

| base dir from unpacking the tar
| - source dir 1
| - source dir 2
| - etc.

based on reading the docstring, but it'd be good to be explicit about it

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

script (str): Script filename.
directory (str): Directory containing the source file. If it starts with "s3://", no action is taken.
directory (str or None): Directory containing the source file. If it starts with "s3://", no action is taken.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add additional_files to the docstring

source_files = [os.path.join(directory, name) for name in os.listdir(directory)]
key = '%s/sourcedir.tar.gz' % s3_key_prefix

if directory and directory.lower().startswith("s3://"):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

single quotes for the string

Comment threadCHANGELOG.rst Outdated
* feature: HyperparameterTuner: Make input channels optional
* feature: Add support for Chainer 5.0
* feature: Estimator: add support for MetricDefinitions
* feature: source_dir accepts a list of directories

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i still haven't heard an explanation for why this is useful. why can't user just stage their files properly in a single source dir before creating an estimator?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From someone on the outside looking in, this looks confusing and unneeded. I understand there's probably a (pressing) reason why we want to do this - but it feels like a hack that we're adding to the PythonSDK to overcome a problem in another system.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am also against this change because of the same reason Jonathan mentioned.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User could stage the files before calling the estimator. User can also copy their own code to S3, and not use the estimator. Or they could build their own docker container, and make boto calls instead of using the SDK at all. The point of this project is to make things easier.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not independently unit tested. This logic is confusing (I'm not sure I completely understand it). I suggest unit testing this and providing some developer documentation describing the contract.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reviews, I will close this PR for now.

directory are preserved when training on Amazon SageMaker.
source_dir (str or [str]): Single path (absolute or relative) or a list of paths to directories with
any other training source code dependencies aside from the entry point file (default: None).
The structures within this directories are preserved when training on Amazon SageMaker.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, more documentation and examples would be helpful.

os.remove(tar_file)


def _list_root_files(script, directory, additional_files):

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am personally against testing private methods, it adds unnecessary coupling to non public facing signatures and does not provide a good grasp of the functionality.

I do agree that testing should be extensive, and cover any edge cases. The tests that I wrote are here https://github.com/aws/sagemaker-python-sdk/pull/494/files#diff-3108f99e19f25f4c77ad4f63d486b174R147

Let me know if you any suggestions of improvement of these methods.

@mvsuspmvsusp closed this Nov 16, 2018
@nadiayanadiaya reopened this Nov 18, 2018
@codecov-io

codecov-io commented Nov 18, 2018

Copy link
Copy Markdown

Codecov Report

Merging #494 into master will decrease coverage by 0.04%.
The diff coverage is 87.87%.

Impacted file tree graph

@@ Coverage Diff @@## master #494 +/- ##
==========================================
- Coverage 94.28% 94.24% -0.05% 
==========================================
Files 59 59 Lines 4551 4567 +16 ==========================================
+ Hits 4291 4304 +13 - Misses 260 263 +3
Impacted FilesCoverage Δ
src/sagemaker/mxnet/estimator.py100% <ø> (ø)⬆️
src/sagemaker/chainer/estimator.py100% <ø> (ø)⬆️
src/sagemaker/pytorch/estimator.py100% <ø> (ø)⬆️
src/sagemaker/fw_utils.py100% <100%> (ø)⬆️
src/sagemaker/model.py93.15% <60%> (-2.51%)⬇️
src/sagemaker/estimator.py89.79% <71.42%> (-0.52%)⬇️
src/sagemaker/tensorflow/estimator.py95.18% <0%> (+0.53%)⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e37ac12...cf52ca8. Read the comment docs.

@mvsuspmvsusp closed this Nov 19, 2018
ChoiByungWook pushed a commit that referenced this pull request Dec 8, 2020
Evan-W-ang added a commit to Evan-W-ang/sagemaker-python-sdk that referenced this pull request Jun 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@mvsusp@codecov-io@leopd@jesterhazy@iquintero@laurenyu@owen-t@nadiaya