google / swift-jupyter Goto Github PK
View Code? Open in Web Editor NEWLicense: Apache License 2.0
License: Apache License 2.0
The last time we merged from Swift main, swift-jupyter started requiring --privileged
instead of --cap-add SYS_PTRACE
. It would be nice to reduce the required privileges again.
$ docker build -f docker/Dockerfile -t swift-jupyter .
[+] Building 81.7s (3/3) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 127B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 34B 0.0s
=> ERROR [internal] load metadata for gcr.io/swift-tensorflow/base-deps-cuda10.2-cudnn7 81.6s
------
> [internal] load metadata for gcr.io/swift-tensorflow/base-deps-cuda10.2-cudnn7-ubuntu18.04:latest:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to do request: Head https://gcr.io/v2/swift-tensorflow/base-deps-cuda10.2-cudnn7-ubuntu18.04/manifests/latest: Bad Gateway
The recent merge causes LLDB to crash when it tries to show an expression value.
I'm going to work around this by disabling showing expression values. Users can still see values using print()
.
This issue reminds us to re-enable showing expression values when we can. I expect some upstream fix will make it start working again soon.
I have been working on Swift-Colab for a while, and it seems like a logical successor to google/swift-jupyter. Google is not actively developing this repository anymore, or really anything revolving around the Swift for TensorFlow project. And I learned the hard way that they won't assist my effort to bring it back.
I put a crash course on how Swift-Colab continued the legacy of google/swift-jupyter in ColabSupportHistory.md. It doesn't support Docker anymore, but it's entirely possible to add that as a feature in Swift-Colab 3.0. @marcrasi I am wondering whether you could put a notice on this repo's README, linking to the spin-off that has more up-to-date documentation.
I tried installing through conda, as well through system python3 in Macbook Air M1. In both cases I ended up with the following error after starting
jupyter-notebook --debug
File "/Users/sindhus/Library/Python/3.8/lib/python/site-packages/ipykernel/kernelbase.py", line 353, in dispatch_shell
await result
File "/Users/sindhus/Library/Python/3.8/lib/python/site-packages/ipykernel/kernelbase.py", line 643, in execute_request
reply_content = self.do_execute(
File "/Users/sindhus/code/swift-jupyter/swift_kernel.py", line 982, in do_execute
self._init_swift()
File "/Users/sindhus/code/swift-jupyter/swift_kernel.py", line 216, in _init_swift
self._init_kernel_communicator()
File "/Users/sindhus/code/swift-jupyter/swift_kernel.py", line 295, in _init_kernel_communicator
raise Exception('Error initing KernelCommunicator: %s' % result)
Exception: Error initing KernelCommunicator: SwiftError(result=<lldb.SBValue; proxy of <Swig Object of type 'lldb::SBValue *' at 0x112896fc0> >, description="error: couldn't start parsing - no stack frame\n")
Kernel did start running otherwise, it is syntax highlighting correctly as well. I am running without tensorflow:
/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/share/jupyter/kernels/swift/kernel.json
{
"argv": [
"/Library/Developer/CommandLineTools/usr/bin/python3",
"/Users/sindhus/code/swift-jupyter/swift_kernel.py",
"-f",
"{connection_file}"
],
"display_name": "Swift",
"language": "swift",
"env": {
"PYTHONPATH": "/Library/Developer/Toolchains/swift-5.5.1-RELEASE.xctoolchain/System/Library/PrivateFrameworks/LLDB.framework/Resources/Python",
"LD_LIBRARY_PATH": "/Library/Developer/Toolchains/swift-5.5.1-RELEASE.xctoolchain/usr/lib/swift/macosx",
"REPL_SWIFT_PATH": "/Library/Developer/Toolchains/swift-5.5.1-RELEASE.xctoolchain/System/Library/PrivateFrameworks/LLDB.framework/Resources/repl_swift"
}
}
Any help would be appreciated!
This used to be https://bugs.swift.org/browse/TF-747, but I'm moving the issue here and adding more details.
It's flaky and hard to reproduce, but here are the kinds of things you need to try:
If you trigger it, the kernel will crash and this will print out on the terminal:
/swift-base/llvm-project/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp:307: void llvm::RuntimeDyldELF::resolveX86_64Relocation(const llvm::SectionEntry &, uint64_t, uint64_t, uint32_t, int64_t, uint64_t): Assertion `isInt<32>(RealOffset)' failed.
Our guess at the reason and how to fix:
If you load up too many shared libraries in jupyter then most of the address space gets used and the memory manager starts giving you pieces of memory that are too far apart for the relocation, causing this error. The only real fix we can think of is migrating LLDB to use orcjit, which Saleem thinks is O(months) of work.
PythonKit + TensorFlow is "too much" for the purposes of this problem, so notebooks using both are going to be flaky.
Hi,
thanks a lot for providing an awesome tool for Swift for Tensorflow.
On Ubuntu 19.10, I am running the latest Swift for Tensorflow toolchain from here. I can install packages, compile and run programs with it just fine.
I installed Swift-jupyter via the conda
route.
When I try to execute a first cell that contains install instructions, like this one:
%install '.package(url: "https://github.com/vojtamolda/Plotly.swift.git", .exact("0.2.0"))' Plotly
%include "EnableIPythonDisplay.swift"
I get the following error:
Installing packages:
.package(url: "https://github.com/vojtamolda/Plotly.swift.git", .exact("0.2.0"))
Plotly
With SwiftPM flags: []
Working in: /tmp/tmprpl_p8ja/swift-install
Fatal error: could not determine host triple: malformed: file /swift-base/swiftpm/Sources/SPMBuildCore/Triple.swift, line 149
Install Error: swift-build returned nonzero exit code -4.
Again, using the toolchain manually, installing packages and building programs using the Swift Package Manager (SPM) works.
I also had a look at the Triple.swift
file from SPM and I don't understand why it should fail, since the reported triple from swift -print-target-info
is:
{
"target": {
"triple": "x86_64-unknown-linux-gnu",
"unversionedTriple": "x86_64-unknown-linux-gnu",
"moduleTriple": "x86_64-unknown-linux-gnu",
"librariesRequireRPath": false
},
"paths": {
"runtimeLibraryPaths": [
"/home/pahl/progs/swift/usr/lib/swift/linux"
],
"runtimeLibraryImportPaths": [
"/home/pahl/progs/swift/usr/lib/swift/linux/x86_64"
],
"runtimeResourcePath": "/home/pahl/progs/swift/usr/lib/swift"
}
}
which should be fine.
Many thanks in advance for your help.
Kind regards,
Axel
Steps:
sudo apt-get install python3-venv
python3 -m venv sju
. sju/bin/activate
pip install -r requirements.txt
python register.py --sys-prefix --swift-toolchain ~/swift-tensorflow/
mkdir ~/src/tensorflow && cs ~/src/tensorflow
git clone [email protected]:tensorflow/swift.git
cd ~/src/tensorflow/swift
jupyter notebook
In Jupyter web UI:
// This cell is here to display the plots in a Jupyter Notebook.
// Do not copy it into another environment.
%include "EnableIPythonDisplay.swift"
IPythonDisplay.shell.enable_matplotlib("inline")
with the error:
Fatal error: 'try!' expression unexpectedly raised an error: Python exception: No module named ipykernel.zmqshell
Traceback:
File "/home/garymm/src/swift-jupyter/swift_shell/__init__.py", line 15, in <module>
from ipykernel.zmqshell import ZMQInteractiveShell
: file PythonKit/Python.swift, line 673
Current stack trace:
0 libswiftCore.so 0x00007f9e385090a0 swift_reportError + 50
1 libswiftCore.so 0x00007f9e38574f40 _swift_stdlib_reportFatalErrorInFile + 115
2 libswiftCore.so 0x00007f9e381defee <unavailable> + 1621998
3 libswiftCore.so 0x00007f9e381dce00 _assertionFailure(_:_:file:line:flags:) + 827
4 libswiftCore.so 0x00007f9e38235880 Dictionary.init<A>(_:uniquingKeysWith:) + 0
5 libPythonKit.so 0x00007f9e390810df <unavailable> + 94431
Current stack trace:
frame #3: 0x00007f9e38fc44cc $__lldb_expr28`static IPythonDisplay.enable(self=IPythonDisplay) at EnableIPythonDisplay.swift:67:30
frame #4: 0x00007f9e38fc2057 $__lldb_expr28`main at EnableIPythonDisplay.swift:104:16
Trying to debug a bit, it seems the python being used by the Swift code is not the python from the venv. This code:
let sys = Python.import("sys")
sys.path
Prints:
['/home/garymm/src/swift-jupyter', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
The kernel file looks right to me:
$ cat ./sju/share/jupyter/kernels/swift/kernel.json
{
"argv": [
"/home/garymm/src/swift-jupyter/sju/bin/python",
"/home/garymm/src/swift-jupyter/parent_kernel.py",
"-f",
"{connection_file}"
],
"display_name": "Swift",
"language": "swift",
"env": {
"PYTHONPATH": "/home/garymm/swift-tensorflow/usr/lib/python3/dist-packages",
"LD_LIBRARY_PATH": "/home/garymm/swift-tensorflow/usr/lib/swift/linux",
"REPL_SWIFT_PATH": "/home/garymm/swift-tensorflow/usr/bin/repl_swift",
"SWIFT_BUILD_PATH": "/home/garymm/swift-tensorflow/usr/bin/swift-build",
"SWIFT_PACKAGE_PATH": "/home/garymm/swift-tensorflow/usr/bin/swift-package"
}
}
I cannot run the following code:
!pip --version
Not even % magic is working. I get the following error:
error: <Cell 13>:1:2: error: cannot find 'pip' in scope
!pip
^~~
It would be nice to read from Google Drive when running Swift in Colab.
You can do this in Python Colab: https://colab.research.google.com/notebooks/io.ipynb. So the obvious thing to try is to use Swift's Python interop to Python.import
the necessary libraries. Unfortunately, this does not work because the Python library prompts the user for an authentication key with an interactive text widget, and the Swift Python interop does not support interactive widgets.
So the right solution may be to modify the Python library so that you can pass it the authentication key directly instead of needing to paste it into a text widget. See here for a bit more detail about how it might be done: https://forums.fast.ai/t/python-textfield-output-not-working/51000/5?u=marcrasi
/Library/Developer/Toolchains/swift-tensorflow-RELEASE-0.11.xctoolchain/System/Library/PrivateFrameworks/LLDB.framework/Resources/Python/lldb$ otool -L _lldb.so | grep Python
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.16)
Traceback (most recent call last):
File "C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr\lib\site-packages\lldb\__init__.py", line 35, in <module>
import _lldb
ModuleNotFoundError: No module named '_lldb'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\mleun\projects\swift-jupyter\swift_kernel.py", line 19, in <module>
import lldb
File "C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr\lib\site-packages\lldb\__init__.py", line 38, in <module>
from . import _lldb
ImportError: DLL load failed: The specified module could not be found.
[I 05:16:55.241 NotebookApp] KernelRestarter: restarting kernel (1/5)
Steps to reproduce:
git remote add -f mikkeyboi https://github.com/mikkeyboi/swift-jupyter.git
git checkout mikkeyboi/master
register.py
while inside conda environment
python register.py --sys-prefix --swift-python-use-conda --use-conda-shared-libs --swift-toolchain path/to/toolchain
jupyter notebook
while within conda environmentAlternatively..
path/to/toolchain/usr/lib/site-packages
and run interactive python ipython
import lldb
I think it's not loading the _lldb.pyd
file that's inside the lldb module. Either that, or I'm missing DLLs (can confirm with Dependency Walker).
@compnerd Were you able to load the lldb module during your testing (specifically the _lldb.pyd
file)?
I am trying to resurrect Swift for TensorFlow, and side-loading Swift on Google Colab is vital to that effort. Running on Google Colab presents several challenges, so I need to run a Jupyter notebook successfully on my Mac first. I set up Docker, but running Swift on Jupyter produces errors I cannot work around.
I followed the instructions for option 3 on the README. Options 1 and 2 are not viable, as building Swift from source is extremely time-consuming. Furthermore, the new kernel must be independent from the TensorFlow toolchain.
I tried setting it up with the kernel gateway (option 4) but kept receiving this error. I assume it’s because the necessary image was removed from Docker Hub:
Using option 3 instead, I created a blank Swift Jupyter notebook that executes print("hello world")
. I ran the code cell and nothing appeared as output. Instead, the terminal logged the errors shown below. After switching the kernel from Swift to Python 3, it worked just fine. The bug happened on both a fresh Docker image and one I modified heavily:
I need to isolate this error from the Swift for TensorFlow toolchain. To start off, I will find a vanilla Ubuntu Docker image and install the Swift 5.5 release toolchain. Then, I will get the Swift REPL running.
Your Docker image automatically downloads an S4TF toolchain, so I assume its code won’t work with an Apple toolchain. My only option is to reconstruct your repository file by file on top of an Apple toolchain. Furthermore, REPL isn’t supported with the TensorFlow toolchain:
When you made the Swift Jupyter kernel, you started out from scratch and gradually built what you have now. Could you point me toward the first file you added, so I can start off by testing that? Then, in what order should I add the other files to reconstruct the entire repository?
The new Swift for TensorFlow won’t need a special Swift toolchain. It will run as a Swift package on top of the release toolchain, allowing it to run on iOS. Is it possible to remove everything related to TensorFlow from the Jupyter kernel? I understand that I may need to add some files back in to get it to run on Colab.
Using an Apple silicon Mac could be the cause of the bug. I have a 2018 Intel Mac mini as well. Do you recommend that I try to reproduce the bug on the mini?
I installed a Docker image as per Option 3 in https://github.com/google/swift-jupyter/blob/master/README.md on a Mac with OSX version 10.15.7 and Docker desktop version 2.4.0.0.
I created a new notebook with a Swift kernel and tried to run the single code cell:
print("hello")
which produces the following error:
Cannot create Swift scratch context (couldn't load the Swift stdlib)Cannot create Swift scratch context (couldn't load the Swift stdlib)[IPKernelApp] ERROR | Exception in message handler:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/ipykernel/kernelbase.py", line 268, in dispatch_shell
yield gen.maybe_future(handler(stream, idents, msg))
File "/usr/local/lib/python3.6/dist-packages/tornado/gen.py", line 735, in run
value = future.result()
File "/usr/local/lib/python3.6/dist-packages/tornado/gen.py", line 209, in wrapper
yielded = next(result)
File "/usr/local/lib/python3.6/dist-packages/ipykernel/kernelbase.py", line 545, in execute_request
user_expressions, allow_stdin,
File "/swift-jupyter/swift_kernel.py", line 967, in do_execute
self._init_swift()
File "/swift-jupyter/swift_kernel.py", line 217, in _init_swift
self._init_int_bitwidth()
File "/swift-jupyter/swift_kernel.py", line 303, in _init_int_bitwidth
result)
Exception: Expected value from Int.bitWidth, but got: SuccessWithoutValue()
The notebook exists on disk and produces the same error every time I load it and attempt to run the cell above.
In debugging #110, I learned that the Swift-python interop defaults to using the system python, even if Jupyter is being run in a virtual env.
I think it'd be more intuitive if the Swift-python interop defaulted to using the same Python installation as Jupyter itself.
Hey, all.
Thanks for the great work on Swift Jupyter. I am trying to figure out how to compile latest Swift 5.3 with Python LLDB support without going off Swift for TensorFlow branch. So far, it worked well except the SWIFT_IMPORT_SEARCH_PATH bit. It appears that has no impact for the apple/llvm-project at release/5.3
. I am wondering how this is implemented and whether we can port it over to the mainline. Thanks!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.