Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate from Python 3.8 to PyPy3 for performance #23

Open
ChrisTimperley opened this issue Dec 8, 2022 · 3 comments
Open

Migrate from Python 3.8 to PyPy3 for performance #23

ChrisTimperley opened this issue Dec 8, 2022 · 3 comments
Assignees
Labels
enhancement New feature or request

Comments

@ChrisTimperley
Copy link
Collaborator

This is most likely caused by unversioned dependencies (i.e., the latest version of cython is being used, which breaks compatibility):

Step 20/47 : RUN pypy3 -m easy_install cython
 ---> Running in 04f90db9da1e
Traceback (most recent call last):
  File "/usr/lib/pypy3.9/runpy.py", line 200, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/pypy3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/usr/lib/python3/dist-packages/easy_install.py", line 4, in <module>
    from setuptools.command.easy_install import main
  File "/usr/lib/python3/dist-packages/setuptools/__init__.py", line 14, in <module>
    from setuptools.dist import Distribution, Feature
  File "/usr/lib/python3/dist-packages/setuptools/dist.py", line 24, in <module>
    from setuptools.depends import Require
  File "/usr/lib/python3/dist-packages/setuptools/depends.py", line 7, in <module>
    from .py33compat import Bytecode
  File "/usr/lib/python3/dist-packages/setuptools/py33compat.py", line 54, in <module>
    unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape)
AttributeError: 'HTMLParser' object has no attribute 'unescape'
The command '/bin/sh -c pypy3 -m easy_install cython' returned a non-zero code: 1
Makefile:41: recipe for target 'crepair' failed
make: *** [crepair] Error 1
make: Leaving directory '/usr0/home/chris/tools/CrashRepair/docker'

I strongly suggest either using pip freeze to generate a complete set of versioned dependencies from an existing image (and subsequently using pip install -r requirements.txt) or otherwise manually specifying versions for each package in Dockerfile.crepair.

@ChrisTimperley ChrisTimperley added the bug Something isn't working label Dec 8, 2022
@ChrisTimperley
Copy link
Collaborator Author

ChrisTimperley commented Dec 8, 2022

Here's a workaround Dockerfile for now:

FROM crepair:builder
COPY --from=crepair:z3 /opt/z3/ /opt/z3/
COPY --from=crepair:llvm-6 /opt/llvm-6/ /opt/llvm-6/
COPY --from=crepair:llvm-11 /opt/llvm/ /opt/llvm11/
COPY --from=crepair:klee /klee/ /klee
COPY --from=crepair:klee /klee-uclibc /klee-uclibc

RUN add-apt-repository -y ppa:pypy/ppa
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y  --no-install-recommends --force-yes \
    bear \
    clang-tidy \
    clang-10 \
    file \
    gfortran \
    pypy3 \
    pypy3-dev \
    python3.8 \
    python3.8-dev \
    python3-pip \
    python3-setuptools

RUN python3.8 -m pip install --upgrade pip
RUN python3.8 -m pip --disable-pip-version-check --no-cache-dir install setuptools
RUN python3.8 -m pip --disable-pip-version-check --no-cache-dir install pylint
RUN python3.8 -m pip --disable-pip-version-check --no-cache-dir install cython
RUN python3.8 -m pip --disable-pip-version-check --no-cache-dir install pysmt==0.9.0
RUN pysmt-install --z3 --confirm-agreement
RUN python3.8 -m pip --disable-pip-version-check --no-cache-dir install funcy
RUN python3.8 -m pip --disable-pip-version-check --no-cache-dir install six
RUN python3.8 -m pip --disable-pip-version-check --no-cache-dir install numpy==1.19.1
RUN python3.8 -m pip --disable-pip-version-check --no-cache-dir install wllvm; return 0;
RUN python3.8 -m pip --disable-pip-version-check --no-cache-dir install sympy

# WARNING: CT thinks that this may use the same Python package directory as the standard pip
RUN pypy3 -m pip install \
      cython==0.29.32 \
      distlib==0.3.6 \
      setuptools==65.6.3 \
      pip==22.3.1 \
      funcy==1.17 \
      six==1.16.0
RUN pypy3 -m pip install \
      wllvm==1.3.1 \
      sympy==1.11.1
RUN python3 -m pip install wllvm==1.3.1
ENV PATH "/opt/llvm-6/bin:/klee/build/bin:${PATH}"
ENV LLVM_COMPILER=clang

WORKDIR /CrashRepair

COPY lib ./lib
RUN cd /CrashRepair/lib \
 && KLEE_INCLUDE_PATH=/klee/source/include make

COPY app ./app
COPY bin ./bin
COPY compiler ./compiler
COPY experiments ./experiments
COPY tests ./tests
COPY Repair.py ./Repair.py

ENV PATH="/opt/crashrepair/bin:/CrashRepair/compiler:/klee/build/bin:${PATH}"
ENV CC=crepair-cc
ENV CXX=crepair-cxx
ENV LD_LIBRARY_PATH "/opt/crashrepair/lib:/CrashRepair/lib:/klee/build/lib:${LD_LIBRARY_PATH}"

RUN ln -s /CrashRepair/bin/crepair /usr/bin/crepair

RUN crepair --help && exit 0

COPY --from=crepair:sourcerepair /opt/crashrepair /opt/crashrepair
RUN rm /opt/crashrepair/lib/libz3.so
COPY --from=crepair:orchestrator /opt/crashrepair /opt/crashrepair

I notice that there's three separate versions of Python in this image. Which one is actually used by the analysis?

@ChrisTimperley
Copy link
Collaborator Author

I've added a workaround to the Dockerfile for this issue, but we should remove the redundant package installations. That is, we should figure out whether Python 3 (system), Python 3.8, or PyPy is being used by the analysis. I assume that only one of these is running (and is being used by the analysis module), but if that isn't the case, let me know. Once we figure that out, we should remove the package installations for the alternative Python versions.

@ChrisTimperley
Copy link
Collaborator Author

@rshariffdeen's reply at our technical meeting: we currently use Python 3.8 but plan to PyPy for better performance (as long as there are no fatal incompatibilities). There shouldn't be any Python 3 (system) package installations.

@ChrisTimperley ChrisTimperley changed the title Docker build fails for analysis component Migrate from Python 3.8 to PyPy3 for performance Dec 20, 2022
@ChrisTimperley ChrisTimperley added enhancement New feature or request and removed bug Something isn't working has-workaround labels Dec 20, 2022
@ChrisTimperley ChrisTimperley added this to the ASE Submission milestone Mar 16, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants