Open miquelduranfrigola opened 1 year ago
In Google Colab, the following works:
%%shell
pip install udocker
udocker --allow-root install
echo "mypwd" | sudo adduser --quiet --disabled-password --gecos "" username
echo "username:mypwd" | sudo chpasswd
This seems to be more difficult than initially expected due to some unanticipated behaviours in Google Colab:
!sudo -u username udocker run -p 8080:80 ersiliaos/eos3b5e:latest bash
For some reason, the localhost inside the container is not found:
Warning: this container exposes TCP/IP ports
******************************************************************************
* *
* STARTING 035ecdff-1065-3e5c-a78a-e180bac6d5d1 *
* *
******************************************************************************
executing: sh
+ [ -z eos3b5e ]
+ ersilia serve -p 3000 eos3b5e
Traceback (most recent call last):
File "/usr/local/bin/ersilia", line 33, in <module>
sys.exit(load_entry_point('ersilia', 'console_scripts', 'ersilia')())
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/root/ersilia/ersilia/cli/commands/__init__.py", line 22, in wrapper
return func(*args, **kwargs)
File "/root/ersilia/ersilia/cli/commands/serve.py", line 33, in serve
mdl.serve()
File "/root/ersilia/ersilia/core/model.py", line 391, in serve
self.autoservice.serve()
File "/root/ersilia/ersilia/serve/autoservice.py", line 345, in serve
self.service.serve()
File "/root/ersilia/ersilia/serve/services.py", line 314, in serve
self._bentoml_serve(self._run_command)
File "/root/ersilia/ersilia/serve/services.py", line 108, in _bentoml_serve
self.port = find_free_port(preferred_port=preferred_port)
File "/root/ersilia/ersilia/utils/ports.py", line 12, in find_free_port
if not is_port_in_use(preferred_port):
File "/root/ersilia/ersilia/utils/ports.py", line 7, in is_port_in_use
return s.connect_ex(("localhost", port)) == 0
socket.gaierror: [Errno -2] Name or service not known
Hi,
I think the "Queue" is getting just too large and there is no clear plan or roadmap for when these issues will be tackled. @DhanshreeA what is the current status of running Ersilia in Colab? Is this something we want to maintain? and if yes,what actions are needed?
Currently, Ersilia is run in Colab using the Python API, which on its own needs to be maintained and has not been tested in some time.
Ideally we should support running dockerized Ersilia models in Colab because of our mission to make Ersilia available as much as possible using free compute resources. As per my initial understanding, this looks like something that can be achieved using a tool called udocker which allows running docker in non privileged settings. And it seems @miquelduranfrigola did some initial work on this regard in Ersilia, however I have not completely verified if this works yet.
Finally, I think it would be a nice to have and we should attempt this one last time before parking it indefinitely.
Update: I was incorrect in saying that Ersilia is run in Colab using the Python API. Ersilia can be run both by using the Python API or the CLI. The Python API is not maintained and possibly runs into issues we are yet not aware of. In addition to that, the test we do have for Ersilia running in Colab notebooks only uses the CLI.
Thanks @DhanshreeA - I tried udocker indeed and I did not succeed. I agree it would be nice to have compatibility with Colab, although it is less urgent of course. How much time do you think we'd need for that?
@DhanshreeA and @miquelduranfrigola I suggest we leave that issue to one of the Outreachy contributors once they have completed a few initial tasks
@GemmaTuron, my two cents: this could potentially be quite complicated for an Outreachy contributor, especially if they don't know containers enough. I have not worked with udocker yet either so I would not be able to provide immediate support.
Is your feature request related to a problem? Please describe.
Google Colab does not officially support Docker, which effectively neglects the use of dockerized models in Google Colab notebooks. While Google Colab notebooks have been working just fine with many models using fetching through Conda, we would like to have the option to fetch models directly from Docker Hub.
Describe the solution you'd like.
We want to run Docker in Google Colab. The package udocker seems to offer a solution.
And then:
This worked for me:
If we accept this solution, we would need to wrap
udocker
inside Ersilia's docker managers.Describe alternatives you've considered
Additional context.
No response