InternVL2-evaluate.sh评估过程报java错误

458 篇文章 6 订阅
19 篇文章 0 订阅
报错:index created!
tokenization...
Traceback (most recent call last):
  File "/usr/local/serving/serving/InternVL/internvl_chat/eval/caption/evaluate_caption.py", line 272, in <module>
    evaluate_chat_model()
  File "/usr/local/serving/serving/InternVL/internvl_chat/eval/caption/evaluate_caption.py", line 207, in evaluate_chat_model
    coco_eval.evaluate()
  File "/opt/conda/lib/python3.10/site-packages/pycocoevalcap/eval.py", line 33, in evaluate
    gts  = tokenizer.tokenize(gts)
  File "/opt/conda/lib/python3.10/site-packages/pycocoevalcap/tokenizer/ptbtokenizer.py", line 51, in tokenize
    p_tokenizer = subprocess.Popen(cmd, cwd=path_to_jar_dirname, \
  File "/opt/conda/lib/python3.10/subprocess.py", line 971, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/opt/conda/lib/python3.10/subprocess.py", line 1863, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'java'
[2024-09-09 03:40:40,030] torch.distributed.elastic.multiprocessing.api: [WARNING] Sending process 492 closing signal SIGTERM
[2024-09-09 03:40:40,997] torch.distributed.elastic.multiprocessing.api: [ERROR] failed (exitcode: 1) local_rank: 0 (pid: 491) of binary: /opt/conda/bin/python
Traceback (most recent call last):
  File "/opt/conda/bin/torchrun", line 33, in <module>
    sys.exit(load_entry_point('torch==2.1.2', 'console_scripts', 'torchrun')())
  File "/opt/conda/lib/python3.10/site-packages/torch/distributed/elastic/multiprocessing/errors/__init__.py", line 346, in wrapper
    return f(*args, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/torch/distributed/run.py", line 806, in main
    run(args)
  File "/opt/conda/lib/python3.10/site-packages/torch/distributed/run.py", line 797, in run
    elastic_launch(
  File "/opt/conda/lib/python3.10/site-packages/torch/distributed/launcher/api.py", line 134, in __call__
    return launch_agent(self._config, self._entrypoint, list(args))
  File "/opt/conda/lib/python3.10/site-packages/torch/distributed/launcher/api.py", line 264, in launch_agent
    raise ChildFailedError(
torch.distributed.elastic.multiprocessing.errors.ChildFailedError:
============================================================
eval/caption/evaluate_caption.py FAILED
------------------------------------------------------------
Failures:
  <NO_OTHER_FAILURES>
------------------------------------------------------------
Root Cause (first observed failure):
[0]:
  time      : 2024-09-09_03:40:40
  host      : 70bfb30806a8
  rank      : 0 (local_rank: 0)
  exitcode  : 1 (pid: 491)
  error_file: <N/A>
  traceback : To enable traceback see: https://pytorch.org/docs/stable/elastic/errors.html
从错误信息来看,你的脚本在执行过程中遇到了FileNotFoundError,具体来说是找不到java命令。这通常意味着系统路径中没有正确配置Java的环境,或者Java根本就没有安装在系统上。

为了解决这个问题,你可以尝试以下几个步骤:

检查Java是否已安装:
在终端运行 java -version 命令来确认Java是否已经安装。如果命令返回了版本信息,说明Java是可用的;如果没有返回任何信息或提示未找到命令,则需要安装Java。
安装Java:
如果Java没有安装,你需要根据你的操作系统来安装它。对于Ubuntu,你可以使用如下命令来安装OpenJDK(这是一个开源的Java平台实现):
sh
深色版本
sudo apt update
sudo apt install default-jdk
安装完成后,再次运行 java -version 来验证安装是否成功。
设置Java环境变量:
如果Java已经安装但是java命令不可用,那么可能是环境变量没有正确配置。你需要确保JAVA_HOME环境变量指向Java安装目录,并且PATH变量包含了JAVA_HOME/bin目录。例如,在bash shell中,你可以这样设置:
sh
深色版本
export JAVA_HOME=/usr/lib/jvm/default-java
export PATH=$JAVA_HOME/bin:$PATH
请根据实际情况替换/usr/lib/jvm/default-java为你系统上的实际Java安装路径。
重新运行脚本:
在确认Java已经正确安装并且环境变量已经设置之后,你可以重新运行你的脚本。
如果你按照上述步骤操作后仍然遇到问题,请提供更详细的环境信息,比如操作系统类型和版本、Python版本等,以便于进一步排查问题。

apt updateapt install default-jdk
这条消息已停止
apt update
apt install default-jdk这个安装过程有些需要用户做选型比如yes还有时区选择,这种在dockerfile里面应该怎么配置?》
在Dockerfile中,我们通常希望构建过程是自动化且可重复的,这意味着我们需要避免任何需要用户交互的步骤。为了在Dockerfile中安装软件包并处理可能的交互式提示,我们可以使用一些技巧来自动化这些过程。

对于Debian和基于Debian的系统(如Ubuntu),可以使用debconf-set-selections工具来提前设定安装过程中的所有交互式问题的答案。这里是一个示例,展示了如何在Dockerfile中非交互地安装default-jdk:

dockerfile
深色版本
# 使用官方的基础镜像
FROM ubuntu:latest

# 更新APT包索引
RUN apt-get update

# 安装所需的依赖包
RUN apt-get install -y software-properties-common

# 添加一个默认的Java版本(这里以OpenJDK为例)
RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
RUN add-apt-repository -y ppa:webupd8team/java
RUN apt-get update
RUN echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
RUN apt-get install -y default-jdk

# 清理缓存
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# 检查Java是否正确安装
CMD ["java", "-version"]
请注意,上述示例中使用的是Oracle Java,而不仅仅是OpenJDK。如果你想要使用OpenJDK,可以简化为以下步骤:

dockerfile
深色版本
FROM ubuntu:latest

# 更新APT包索引
RUN apt-get update

# 非交互式安装default-jdk
RUN apt-get install -y --no-install-recommends default-jdk

# 清理缓存
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# 检查Java是否正确安装
CMD ["java", "-version"]
在这个例子中,通过使用--no-install-recommends选项,我们告诉APT只安装必需的包而不安装推荐的包,这有助于减少镜像大小。

另外,-y标志告诉APT自动回答“是”(即同意)所有提示,这样就避免了任何交互式的确认。

最后,通过CMD ["java", "-version"]命令,可以在容器启动时检查Java的版本,确保安装成功。

请根据你的具体需求调整上述示例中的细节。如果你使用的是不同的Java发行版或者其他系统组件,你可能需要相应的调整安装命令。

深度搜索
但是安装过程还有数字的配置和选择,这个要怎么配置?
对于那些需要数字输入或其他特定配置的交互式安装过程,可以通过预先配置debconf问题来自动化这些步骤。debconf是Debian包管理系统的一部分,它可以用来设置安装过程中的默认答案,从而避免交互式输入。

假设安装过程中需要你选择某些选项,你可以通过debconf-set-selections命令来预设这些选项。你需要知道每个问题的确切格式和答案,然后将它们设置为默认值。

下面是一个简化版的例子,假设某个安装过程需要你输入数字来选择配置选项:

dockerfile
深色版本
FROM ubuntu:latest

# 更新APT包索引
RUN apt-get update

# 安装debconf-utils,用于设置debconf问题
RUN apt-get install -y debconf-utils

# 设置debconf问题的答案
# 这里的格式是 package_name question_type question_identifier select answer
# 例如,如果某个软件包在安装过程中询问你是否接受许可协议(这里用"license_agreement"表示),并且需要输入"1"来表示同意:
RUN echo 'package_name question_type question_identifier select 1' | debconf-set-selections

# 安装该软件包
RUN apt-get install -y --no-install-recommends package_name

# 清理缓存
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# 执行一些测试命令来确保安装正确
CMD ["command_to_test_installation"]
你需要替换package_name为你实际要安装的包名,question_type和question_identifier取决于具体的软件包和问题类型,select 1中的数字1是你希望选择的答案。

如果你知道确切的问题标识符,可以从安装包的文档或者通过运行安装程序并记录其输出来获取。如果不知道问题标识符,你可能需要查看包的源代码或在网上搜索相关信息。

对于Java安装,通常情况下不会涉及到需要输入数字的选择,因为大多数时候只是接受许可协议。如果是这种情况,上面提到的oracle-java8-installer或default-jdk安装应该已经足够了。

如果你确实遇到了需要特定数字输入的情况,并且这个输入对于安装的成功至关重要,你需要确定这些输入的具体内容,并将其添加到debconf-set-selections命令中。

如果你能够提供更具体的安装过程中的问题描述,我可以帮助你更准确地设置这些配置。

深度搜索
安装过程让我选择时区,这个要怎么处理
当安装过程中需要选择时区时,你可以通过debconf来设置默认的时区选择。这通常涉及对tzdata包的配置。下面是一个示例,展示如何在Dockerfile中设置时区:

dockerfile
深色版本
# 使用官方的基础镜像
FROM ubuntu:latest

# 更新APT包索引
RUN apt-get update

# 安装debconf-utils,用于设置debconf问题
RUN apt-get install -y debconf-utils

# 设置时区
# 选择时区,例如亚洲/上海
RUN echo 'tzdata tzdata/Areas select Asia' | debconf-set-selections
RUN echo 'tzdata tzdata/Zones/Asia select Shanghai' | debconf-set-selections

# 安装基本的工具包
RUN apt-get install -y tzdata

# 安装Java
RUN apt-get install -y --no-install-recommends default-jdk

# 清理缓存
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# 检查Java是否正确安装
CMD ["java", "-version"]
在这个例子中,我们首先更新了APT包索引,然后安装了debconf-utils,这是用来设置debconf问题的工具。接着,我们设置了时区选择问题的答案:

tzdata tzdata/Areas select Asia 表示选择亚洲区域。
tzdata tzdata/Zones/Asia select Shanghai 表示选择亚洲区域下的上海时区。
请注意,时区的选择必须符合tzdata数据库的标准名称。你可以在这里找到所有有效的时区名称:The Time Zone Database。

如果你需要选择其他时区,只需将Asia/Shanghai替换为相应的时区名称即可。

此外,确保在安装Java之前设置好时区,这样可以确保安装过程中使用的配置是正确的。

如果你需要在容器内部设置时区,还可以通过修改/etc/timezone文件来指定时区,并通过dpkg-reconfigure命令来应用更改:

dockerfile
深色版本
# 设置时区文件
RUN echo "Asia/Shanghai" > /etc/timezone

# 应用时区设置
RUN dpkg-reconfigure -f noninteractive tzdata
这种方式同样有效,并且更为直接。你可以根据自己的需求选择合适的方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值